shell脚本的简单使用:六 ——之循环使用

for循环的使用
#输出字符串中的字符,没有进行循环
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 "type<Ctr+D> to terminate"
echo -n '输入您最喜欢的应用:'
while read FLIM
do
 echo "您喜欢的应用是:$FLIM"
done

执行时候会让你输入对应的应用就会执行你相应的操作
type<Ctr+D> to 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 是奇数

猜你喜欢

转载自janle.iteye.com/blog/2368239