shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
1、expr计算整数变量值
s=`expr 2 + 3`
运算符号和参数之间要有空格分开;
2、let命令
let s=(2+3)*4
echo $s
3、for语句
#!/bin/bash for var in one two three four five do echo ------ echo '$var is' $var done
以命令返回值作为列表 #!/bin/bash for var in `ls` do echo ----- echo $var done
4、while语句
语法格式:while 表达式 do 命令行 done
#!/bin/bash num=1 while [ $num -le 10 ] do echo -e "\t the num is $num" let num=num+1 done
5、until语句
语法格式:unitil 表达式 do 命令行 done
#!/bin/bash sum=0 num=10 until test $num -eq 0 do sum=`expr $sum + $num` num=`expr $num - 1` done echo "sum = $sum"
shift语句:将变量的值依次向左传递,并形成一组新的参数值–例:位置变量当前值为:1=file1 2= file2 3=file3– 执行一次shift后为:1=file2 2=file3还可以在shift命令中指定位置变量转移的次数–shift n
#!/bin/bash while [ -n "$*" ] do echo $1 $2 $3 $4 $5 $6 shift done
7、if语句
if 语句的一般形式 :if 条件表达式 then #当条件为真时执行以下语句 命令列表 else #当条件为假时执行以下语句 命令列表 fi
#!/bin/bash if test -f "$1" then echo "$1 is an ordinary file" else echo "$1 is not an ordinary file" fi
8、case语句
取值后面必须为单词in,每一个模式必须以右括号结束。取值可以为变量或常数。取值检测匹配的每一个模式,一旦模式匹配,其间所有命令开始执行直至;;。执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用*号捕获该值,再接受其他输入。[注]1.模式字符串中可以使用通配符2.如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令列表。3.各模式字符串应是唯一的,不应重复出现,并且要合理安排它们的出现顺序,例如,不应将“*”作为头一个模式字符串,因为“*”可以与任何字符串匹配,若第一个出现,就不会再检查其他模式了。4.case语句以关键字case开头,以关键字esac结束。5.case的退出(返回)值是整个结构中最后执行的命令的退出值。若没有执行任何命令,则退出值为0.
#!/bin/bash case $1 in 1) echo " you choice is 1";; 2) echo " your choice is 2";; *) echo " your choice is others";; esac
9、break与continue
–1、break:用于立即终止当前循环的执行,break命令可以使用户从循环体中退出来。–语法:break[n] ,其中,n表示要跳出几层循环,默认值为1–2、continue:跳过循环体中在其之后的语句,会返回到本循环层的开头,进行下一次循环。–语法:continue[n],其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环,默认值为1,循环层数是由内向外编号。
10、函数
函数:由函数标题和函数体两部分组成。标题是函数名。函数体是函数内在的命令集合。标题名称必须唯一。变量均为全局变量,没有局部变量。
#!/bin/bash num=1 hello() { echo "hello boy~ It's our $num meeting" let num=num+1 }
11、select语句
格式:
select 变量 in 列表 do 命令行(通常用到循环变量) done
制作一个选择表,在列表中选择一个选项执行命令行。如果选择的变量不在列表序列中,则返回一个空值。需要用break退出循环。
#!/bin/bash echo "a is 5 ,b is 3. Please select your method: " a=5 b=3 select var in "a+b" "a-b" "a*b" "a/b" do break done case $var in "a+b") echo 'a+b= '`expr $a + $b`;; "a-b") echo 'a-b= '`expr $a - $b`;; "a*b") echo 'a*b= '`expr $a \* $b`;; "a/b") echo 'a/b= '`expr $a / $b`;; *) echo "input error" esac
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。