Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1255590
  • 博文数量: 261
  • 博客积分: 4196
  • 博客等级: 上校
  • 技术积分: 3410
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-17 17:05
文章分类

全部博文(261)

文章存档

2018年(1)

2017年(22)

2016年(2)

2015年(8)

2014年(27)

2013年(40)

2012年(161)

分类: LINUX

2012-02-27 11:07:55

变量

本地和全局 shell 变量

1.  局部变量

  a) 当引用shell时,只有创建它的shell能够知道变量的存在

2. 全局变量

a) 执行shell命令来创建子shell(bashsh)

b) shell中创建的变量是局部于创建它的 shell ,除非使用export命令将该变量全局化

c) 可以被各个子shell共享

3. 环境变量通过改变这些变量的值,用户能够定制此环境一些环境变量的例子HOME, PATH, PS1, PS2, LOGNAME, SHLVL, SHELL

 HOME变量

a) Linux系统中的每个用户都有一个相关的称作HOME的目录

b) 当一个用户登录后,他/她进入相应的HOME的目录

       echo $HOME

 PATH 变量包含一列用冒号定界的目录的路径名字,便于可执行程序的搜索

 PS1变量: PS1(Prompt String 1)变量包含了shell 提示符,$ 符号

PS1="HELLO>"  

HELLO>

PS2 变量: 是为第二个提示符设置值的环境变量

 LOGNAME 变量:包含用户的注册名字;echo "${LOGNAME}"

 SHLVL 变量该变量包含你当前工作的shell level

 SHELL变量:  环境变量存储了用户的缺省shell

env 命令

         可用来查看所有已定义的环境变量表和它们各自的值

定义环境变量

       export  TEST="Mypath“

在系统配置文件中定义环境变量 /etc/profile

在最后一行加入export VAR1=hello,重启Linux,然后查看环境变量

   4. 位置变量

   shell程序在运行时传入的参数。被存放在1-99个变量名中,被形象地称为位置变量。位置$0bash

       #!/bin/bash

       #var.sh

       echo $1

       echo $2

       echo $3

  授权:chmod +x var.sh

  执行:./var.sh I love china

命令替换

在单个命令行中使用多个命令的另一种方法(非Pipes)是通过命令替换

1.例子

             echo "The date is `date`"

             or

    echo "The date is $(date)"

expr 命令

     用于求值算术表达式。该命令的输出被发送到标准输出

        expr 4 + 5 将在屏幕上显示9

    1. 注意:运算符两边必须有空格
    2. *必须使用\忽略其特定意义
    3. 不支持小数,会自动忽略小数部分
    4. error:

a)  expr 4+5

    1. 你可以在$((… ))中使用表达式,用下面的命令来计算它的值:

a)  $((expression))

条件执行

test 或者 [] 命令

1.       求值表达式,并返回true (0) false1

2.        -a and逻辑运算符 –o or逻辑运算符

if..then..[elif]..else 构造

1.       Linux shell提供了循环和判定的构造,可以在shell脚本中使用

2.       结合test或者[ ]使用

3.       必须有结束符fi

算术测试

1.       结合if构造,它可用于测试变量的数字值

2.       结合if构造,它可用于测试变量的数字值

                         i.              -eq  等于

                       ii.              -ne  不等于

                      iii.              -gt  大于

                     iv.              -ge  大于或等于

                       v.              -lt  小于

                     vi.              -le  小于或等于

例子

       echo "Enter the percentage of calls answered same day."

       read actual

       if [ $actual -le 80 ]

       then

               echo "Your Grade is Average."

        elif [ $actual -gt 80 -a $actual -le 90 ]

        then

                echo "Your Grade is Good."

        else

                echo "Your Grade is Outstanding."

        fi

case

       shell脚本中使用的这个构造依据变量的值而执行一组特定指令

       当变量的值和其中一个指定的值相匹配时,就执行写在该值下的一组命令

       每一组命令必须以;;隔开

       case $varname in

1.value1) …..;;

2.value2)…..;;

3. *) ….

 esac

迭代

  while 构造

      while <条件>

      do

      <命令(s)>

       Done

   只有条件为真时,就执行dodone之间的命令

  until构造

until循环构造的求值模式于while循环相反。until循环将继续执行直到求值的条件为真。

  for 构造

       for variable_name in

       do

              …

       done

    1. for循环取一列值作为输入并对循环中每个值执行循环
    2. for ((init_statement; condition_statement; increment_statment))
    3. for var_name  in  `seq  init_value  incre_value  last_value`

break continue 命令

break命令引起终止循环

continue命令的使用将强迫一个新的重复

数组

1. 数组赋值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
     array[1]=var2
     ...
     array[n]=varN

2. 计算数组元素个数:
${#array[@]} 
或者  ${#array[*]}

       注:BASH的特殊参数 @ * 都表示扩展位置参数,从1开始

    1. 引用数组

       echo ${array[n]}

 

标准输入读入n次字符串,每次输入的字符串保存在数组array

#!/bin/bash

#array.sh

i=0
n=5
while [ $i -lt $n ] ;

do
   echo "Please input strings ... "
   read array[$i]
   b=${array[$i]}
   echo "$b"
   i=`expr $i + 1`
done

小结

1.    Shell脚本允许输入/输出、操纵变量、和强有力的控制流以及编程的迭代构造

2.    echo命令被用于在屏幕上显示消息

3.    通过带有#符号的前缀语句,Shell脚本中可以包含注解入口

4.    当引用一个变量时,只有创建它的shell知道该变量

5.    export命令可用于从父shell向子shell参数传递

6.    一些环境变量是HOME, PATH, PS1, PS2, LOGNAME, SHLVL, SHELL

7.    命令替换中使用重音符

8.    expr命令用于求值算术表达式

9.    使用命令替换计算算术表达式

10.test [ ]命令用于求值条件

11.shell脚本中if case构造用于判定

12.Whileuntil for构造用于创建执行重复任务的shell脚本

13.Break命令用于终止一个循环,而continue命令再开始循环

阅读(2736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~