case in 语句
printf "input number:" read num case $num in 1) echo "one" ;; 2) echo "two" ;; *) echo "error" ;; esac (1) case、in 和 esac 都是 Shell 关键字,num 表示表达式,1表示匹配模式。 num 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结 果,只要能够得到 num 的值就可以。 (2) 1可以是一个数字、一个字符串,甚至是一个简单的正则表达式。 (3) 整体和c语言中的switch case相似 *) 相当于default
printf "input a char" read -n 1 char case $char in [0-9]) echo "数字" ;; [a-z]) echo "小写字母" ;; *) echo "error" ;; esac
while语句
sum=2 while ((sum < 20)) do ((sum += i)) ((i++)) done echo "the sum is:$sum" printf "ctr+d结束,输入数字" while read n do ((sum += n)) done echo "计算结果为:$sum"
until语句
utile: 到了条件才执行,
while: 未到条件才执行,
read num i=1 until ((i > 3)) do echo "num=$num i=$i" ((num += i)) ((i++)) done echo "the num is:$num"
for语句
#c语言风格 sum=0 for((i=1; i<=4; i++)) do echo "i=$i" done #shell风格 for n in {1..4} do echo "n=$n" done #使用shell通配符 for filename in *.sh do echo $filename done
select in 语句
#ctrl+d, break 结束循环 select in 是无限死循环 select num in "china" "english" "bali" "jopan" "break" do echo $num done printf "选一个你喜欢的品牌" select like in "ysl" "dior" "amas" "chanel" do case $like in "ysl") echo "口红" break ;; "dior") echo "香水" break ;; *) echo "重新输入吧" esac done
break 和 continue
Shell 中的 break 和 continue 能够跳出多层循环,也就是说,内层循环中的 break 和 continue 能够跳出外层循环。
break num
continue num
for((i=1; i<=5; i++)); do for((j=1; j<=5; j++)); do if((i*j==12)); then continue 2 fi printf "%d %d" $i $j break 2 done done