shell 脚本语法 3.21

本文介绍了Shell脚本的基础知识,包括数值运算、条件判断、控制流程语句、函数定义及调用、数组操作等内容,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Shell中的数值运算及运算方式差异

 (1)expr运算工具:

    aa=11

    bb=22

    cc=$(expr $aa + $bb) 注意运算符两边的空格,不加空格的打印出两个字符和“+“,不运算

    cc=$[$aa+$bb]

    cc=${{$aa+$bb}}

   (2)脚本运行的差异:

     sh filename.sh          当以此方式运行时系统另起一个子进程

     source filename.sh   当以此方式运行时直接在父进程中进行

2.Shell中的判断式及控制流程语句 


(1)条件判断命令test:

        整数测试比较运算符见上图   test 1 –lt 4      #判断    1<4 echo $? #结果为0

        文件测试   test -d “mydoc” 判断mydoc是否是目录

        字符串测试见上图

        其他参数 -a逻辑与 -o逻辑或 !逻辑非

(2) shell运算符和C语言基本类似,也有分支、循环流程 控制。 

         seq命令:产生1-9的数字序列 比如 seq 1 9

         分支结构 :if 和 case

         if [ $# -eq 0 ] 

            then echo “输入了0个参数” 

         elif [ $# -gt 1 ] 

            then echo “输入了多个参数” 

         else echo “输入了1个参数” 

         fi

        case “$#” in 

           0) echo “输入了0个参数” ;;

           1) echo “输入了1个参数” ;; 

           *) echo “输入了多个参数”;; 

       esac

       每个分支条件后必须以两个分号结尾

      

       循环结构: for 和 while

        for i in {1..9} #大括号中不能有变量

        for i in `seq 1  9` 

        do echo `expr $i \* 10` 

        done

      

      while例子——求1到100的和

       i=1 

       sum=0 

       while [ $i –le 100 ] 

       do 

           sum=$[$sum+$i]

           i=$[$i+1] 

       done 

      echo $sum

     break 和 continue与平时的编程语言的用法一样,只是shell中还有break2 和 continue 2 :跳出两层整个循环和跳出两层本次循环

     以上标红的为语句的关键部分

    read 变量1 [变量2 …]  可以从键盘上读取多个变量的值,用户输入数据时,以空格 或者Tab键作为分隔。 

    如果输入的数据个数不够,则从左到右对应赋值,没有输入 的变量为空; 

    如果输入的数据个数超了,则从左到右对应赋值,最后一个 变量被赋予剩余的所有数据。

    -p:指定读取值时的提示符; 

    read –p “please intput a num:”num

3.Shell中的函数

  定义函数的格式为: 

   函数名() {

       命令1 . . . 

   }

  函数名()

{

 命令1 . . . 

}

参数可以传递给函数,并由脚本进行访问: 

 函数名 参数1 参数2 ....

 以下是函数fname的定义:

 fname() {

   echo $1,$2; #访问参数1和参数2 

   echo "$@"; #以列表的方式一次性打印所有参数 

   echo "$*"; #类似于$@,但是参数被作为单个实体

   return 0; #返回值 

}

4.Shell数组

(1)普通数组的定义类似于java语言

 打印出特定索引的数组元素内容:

 echo ${array_var[0]} 

index=4 

echo ${array_var[$index]} 

以清单形式打印出数组中的所有值: 

 echo ${array_var[*]}   作为单个字符打印

也可以这样使用 

echo ${array_var[@]}  作为一个整体打印

打印数组长度: 

echo ${#array_var[*]} 

(2)shell 提供了另外一种数组,其可以使用任意的字符串作 为下标(不必是整数)来访问数组元素。这种数组叫做关联数组  关联数组的下标和值称为键值对,它们是一一对应的关系 。在关联数组中,键是唯一的,值可以不唯一。 

 定义关联数组 shell 的关联数组和 shell 的下标数组在定义和使用上完 全一样,只是在索引上有区别。 

 需要注意的是,在使用关联数组之前,需要使用命令 declare -A array 进行显示声明

实例: name=(jim tom lucy)

           declare -A phone 

           phone=([jim]=135 [tom]=136 [lucy]=158)

          for i in `eval echo {0..$((${#name[*]}-1))}` 

          do 

             echo ${name[i]} 

             phone number is ${phone["${name[i]}"]}

         done

在命令提示符下输入 ./test.sh,执行结果如下:

 jim phone number is 135

 tom phone number is 136 

lucy phone number is 158

 ${!array[*]} 取关联数组所有键 

 ${!array[@]} 取关联数组所有键 

 ${array[*]} 取关联数组所有值 

 ${array[@]} 取关联数组所有值 

 ${#array[*]}    关联数组的长度 

 ${#array[@]} 关联数组的长度



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值