#输出字符串中的字符,没有进行循环 for str in '这 个 字符 串 不进行 循环' do echo -e "$str" done #for循环的另一种使用 #for((i=0;i<$#;i++)) for((i=0;i<10;i++)) do echo "输出 -$i" done #显示以.bash开头的文件 for FILE in $HOME/.bash* do echo $FILE done
运行后的结果为 运行输出 1 运行输出 2 运行输出 3 运行输出 4 这 个 字符 串 不进行 循环 输出 -0 输出 -1 输出 -2 输出 -3 输出 -4 输出 -5 输出 -6 输出 -7 输出 -8 输出 -9
while循环使用
这里有个简单的事情记录一下就当是回顾一下之前的命令
#使用while循环 count=10 while [ $count -gt 0 ] do count=`expr $count-1` echo "当前的count值是:$count" done
这样写运行会出现一个问题,看看执行结果
当前的count值是:10-1 for_while_util.sh: line 46: [: 10-1: integer expression expected
修改一下
count=10 while [ $count -gt 0 ] do count=`expr $count - 1` #符号周边加上空格 echo "当前的count值是:$count" done #下个办法就是声明类型 #-i 声明为整数 #-a 声明未数组 #-f 声明未函数 #-r 声明未只读 declare -i count=10 while [ $count -gt 0 ] do count=`expr $count-1` #符号周边可以不是空格 echo "当前的count值是:$count" done
运行的结果正常
当前的count值是:9 当前的count值是:8 当前的count值是:7 当前的count值是:6 当前的count值是:5 当前的count值是:4 当前的count值是:3 当前的count值是:2 当前的count值是:1 当前的count值是:0
继续一个wille的例子
#while循环可用于读取键盘信息 echo "typeto terminate" echo -n '输入您最喜欢的应用:' while read FLIM do echo "您喜欢的应用是:$FLIM" done
执行时候会让你输入对应的应用就会执行你相应的操作
typeto terminate 输入您最喜欢的应用:weix 您喜欢的应用是:weix
注意事项
#在shell中while的死循环有多种,只要知道什么情况下会进入死循环就好,判断boolean和是否是空的就知道是不是死循环了 #while true=while :=while [ 0 ]=while [ 1 ]=while [ 任意的非判断字符 ] i=0.2 while [ $(echo "$i <= 1.0" | bc -l) -eq 1 ] #这里需要又-eq,如果没有就会成为以下的结果 do b=$(echo "$i <= 1.0" | bc -l) echo $b "echo \"$i <= 1.0\" | bc -l" echo $i i=$(echo "$i + 0.2" | bc -l) done echo "done" #这个会一直判断为true while [ 0 ] do echo "while is 0" done #这个也会一直循环 while [ 1 ] do echo "while is 1" done
until 循环使用
u=0 until [ ! $u -lt 10 ] #!号后边一定记得空格 do echo "使用until输出:$u" u=`expr $u + 1` #这里不加空格会出大事,一直会循环,你懂得 done
执行后的结果
使用until输出:0 使用until输出:1 使用until输出:2 使用until输出:3 使用until输出:4 使用until输出:5 使用until输出:6 使用until输出:7 使用until输出:8 使用until输出:9
以上我们说了闹事的循环,接下来我们怎么能让它不闹事呢,那就需要跳出循环
跳出循环
之前在使用时候使用过“;;”
那个只是在swich中使用不让一箭穿心的运行,算是缓解循环的一种,
break命令
#使用break跳出循环 while : do echo -n "input a number between 1 to 5:" read anum case $anum in 1|2|3|4|5)echo "your write number is $anum" ;; *)echo "your number must between 1 and 5" break ;; esac done
运行结果
input a number between 1 to 5:g your number must between 1 and 5
#跳出多层循环时候使用break(n),跳出到第几层就写几 for var in 1 2 3 do for var1 in 1 2 do if [ $var -eq 2 -a $var1 -eq 2 ] then echo "满足条件我跳出第二次的循环" break 2 else echo "循环1=$var 循环2=$var1" fi done done
运行结果
循环1=1 循环2=1 循环1=1 循环2=2 循环1=2 循环2=1 满足条件我跳出第二次的循环
使用continu
while : do echo -n "Input a number between 1 to 5: " read aNum case $aNum in 1|2|3|4|5) echo "Your number is $aNum!" ;; *) echo "You do not select a number between 1 to 5!" continue echo "Game is over!" ;; esac done
这里没有输出Game is over
奇偶输出
#使用continu numbers="1 2 3 4 5 6 7" for num in $numbers do i=`expr $num % 2` if [ $i -eq 0 ] then echo "数字$num 不是奇数!" continue fi echo "数字$num 是奇数" done
输出结果
数字1 是奇数 数字2 不是奇数! 数字3 是奇数 数字4 不是奇数! 数字5 是奇数 数字6 不是奇数! 数字7 是奇数