您的位置:首页 > 运维架构 > Shell

Shell脚本语法3.21

2018-03-21 21:32 148 查看
1.数值运算
  表达式中,数字和运算符之间要有空格,出现在语句中要加反引号
  a=11 b=22
(1)   加:dd=$(exper $a + $b)运算符两边必须有空格
       Let c=$a+$b
       c=$[$a+$b]
       c=$(($a+$b))
       c=`expr $a + $b`
乘:expr 1 \* 3
例:echo `expr 1 + 3`
(2) 两种运行方式的不同
1>  sh hello.sh 不会获取脚本中的变量
2>  source hello.sh会获得脚本中的变量
2.条件判断命令 test
  真返回0,假返回1
(1) 整数,比较运算符
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
  例:test 1 –lt 4 判断1<4
      echo $? 判断上条语句的执行结果
 等价形式 [ 1 –lt 4 ]
(2) 文件测试
-e 文件存在为真
-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于零
-r 存在且可读
-w 存在且可写
-x 存在且可执行
  例:判断mydoc是否有目录
      test –d “mydoc”
(3) 字符串测试
test s 字符串s非空
    test s1 = s2 判断s1=s2(等号两边加空格)
    test s1 != s2 判断s1不等于s2
    test –z s 判断s的长度为0,即空串
    test –n s 判断s长度>0
(4) 其他参数
-a 逻辑与
-o 逻辑或
! 逻辑非
3. 控制流程
   (1)if 语句,if [判断];then (写在一行) if与判断之间一定有空格
      例: if [ $# -eq 0 ]
           then
              echo “输入了0个参数”
           elif [ $# -gt 1 ]
           then echo “输入了多个参数”
           else echo “输入了1个参数”
           fi
(3)case语句
每个分支条件后必须以两个分号结尾
      case $变量名称 in
          “第一个变量内容”) 程序段;;
          “第二个变量内容) 程序段;;
                       *) exit 1;;  (*表示其他值)
     esac
例:case “$#”in
0)  echo “输入了0个参数”;;
1)  echo “输入了1个参数”;;
*)echo “输入了多个参数”;;
          esac
(4)循环结构
1>for i in {1..9}大括号中不能有变量
for i in `seq 1 9` (seq命令:产生1-9的数字序列)
do
    echo `expr $i \* 10` (或echo $(expr $i \* 10))
done
     2> while 语句
        while [判断]
       do
           程序段
       done
       until [判断]
       do
          程序段
       done
        例:求1到100的和
         i=1
         sum=0
         while [ $i –le 100 ]
         do
           sum=$[$sum+$i]
           i=$[$i+1]
         done (表示结束)
         echo $sum
      break和continue可以接受参数
      break 2 表示跳出两层循环
 3> forvar in con1 con2 con3 …
     do
        程序段
     done
     for((初始值;限制值;运行步阶))
     do
       程序段
     done
4.函数的定义
 1> 定义格式:
    函数名 (){
    命令1
    . . .
}
2>所有函数在使用前必须定义,放在脚本的开始部分
3>调用时仅使用函数名即可
4>参数可以传递给函数
  fname arg1 arg2
  fname()
  {
   echo $1,$2; 访问参数1和参数2
   echo “$@”; 以列表的方式一次性打印所有参数
   echo “$*”; 类似于$@,参数被作为单个实体
   return 0;
}
 5> -p:指定读取值时的提示符;read–p“please intput a num:”num
可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;
如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。
5.数组
 (1) 数组定义
    array_var=(1 2 3 4 5 6) (索引从0开始)
    索引-值方式:
    array_var[0]=”test1”
     array_var[1]=”test2”
     array_var[2]=”test3”
     array_var[3]=”test4”
 (2) 打印出特定索引值的数组元素内容
      echo${array_var[$index]}
 (3)以清单的形式打印出所有值
    echo ${array_var[*]}
    echo ${array_var[@]}
 (4)打印数组长度
    echo ${#array_var[*]}
6.关联数组
 可以用任何字符作为下标,使用前用declare –Aarray进行声明
 ${!array[*]} 取关联数组所有键${!array[@]}取关联数组所有键${array[*]}取关联数组所有值${array[@]} 取关联数组所有值${#array[*]}关联数组的长度${#array[@]}[/b]关联数组的长度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: