【linux系统基础知识-Shell脚本学习笔记12-循环】

12.1.【循环说明解释】

 

循环是可以使你多次执行一系列命令。

循环包括:

 for循环
• while循环
• select循环
• for....do....done, while...do...done,until...do...done,

12.2.【for循环】

• for循环使你对列表中的每一项重复执行
一系列命令。
• 语法格式:
• for name in word1 world2 …worldN
• do
• list
• done

• name 是变量名,word1到wordN是一系列由空格分隔的字符序列(单词)。每次执行for循环
时,变量name的值就被设为单词列表(word1到wordN)中的一个单词。for循环执行的次数
取决于指定的word的个数。
• 在for循环的每次反复中,都会执行list中指定的命令。
• 也可以写成如下格式:
• for name in word1 wrold2 … wordN ; do list ;done

12.3.【for循环实例】

 for i in 0 1 2 3 4 5 6 7 8 9
do
echo $i
done

//----------------------------------------
 for i in /etc/a* ;do
echo $i

done

试问,从 1到1000 ?

12.4.【for循环实例语句的打印】

 LIST="Tomy Jony Mary Geoge"
 for i in $LIST
 do
      echo $i
 done

【linux系统基础知识-Shell脚本学习笔记12-循环】_第1张图片


 12.5.【for循环实例语句的打印】

 #!/bin/bash
# "for" "cut" usage
# Using for to read the user of this linux system.
user=`/bin/cut -d ":" -f1 /etc/passwd | /bin/sort`
echo "The following is your linux system's user: "
for username in $user
do
echo $username
done

 12.6.【for循环练习】

 练习编写脚本:将系统的mysql删除。
• for i in `rpm –qa|grep –i mysql`
• do
• rpm –e $i --nodeps
• done

-----------------------------------------------------------------------------------

 12.7.【cut命令】

 cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段
如:使用|分隔
cut -d'|' -f2 1.test>2.test
使用:分隔 cut -d':' -f2 1.test>2.test
使用单引号或双引号皆可
 -c 和 -f 参数可以跟以下子参数:
m 第m个字符或字段
m- 从第m个字符或字段到文件结束
m-n 从第m个到第n个字符或字段
-n 从第1个到第n个字符或字段
 cut -d: -f 1-7 /etc/passwd
 cut -d: -c 1- /etc/passwd

 12.8.【while循环】

 while循环使你能够重复执行一系列的命令,直到某种条件发生。
• 基本语法:
• while cmd
• do
•    list
• done

 12.9.【while循环l练习】

• cmd是一个条件测试命令,list是一个或多个命令的列表。
• 1.执行cmd
• 2.如果cmd的退出状态为非0,则退出循环
• 3.如果cmd的退出状态为0,则执行list
• 4.当list结束时,回到第一步
• 可以写成:
• while cmd ; do list ; done

 12.10.【while循环l练习】

 x=0
 while [ $x –lt 10 ]
 do
 echo $x
 x=`expr $x + 1`
 done
 #!/bin/bash
 num=0
 while [ $num -lt 10 ];do
 echo $num
 let num+=1
 done
// 当条件为真时执行循环

 12.11.【while循环练习-批量添加用户】

 添加批量用户1

 #!/bin/bash
sum=0
while [ $sum -lt 10 ]
do
sum=`expr $sum + 1`
/usr/sbin/useradd aaaa$sum
echo “123456" | passwd --stdin aaaa$sum
done

交互式添加批量用户

#!/bin/bash
echo "please input user name:"
read name
echo "please input number:"
read num
n=1
while [ $n -le $num ]
do
/usr/sbin/useradd $name$n
n=`expr $n + 1 `
done
echo "please input the password:"
read passwd
m=1
while [ $m -le $num ]
do
echo $passwd | /usr/bin/passwd --stdin $name$m
m=`expr $m + 1`
done

 12.12.【嵌套while循环】

 可以将一个while循环作为另一个while循环主体的一部
分,如下:
 while cmd1; #this is loop1,the outer loop
 do
         list1
         while cmd2; #this is loop2,the inner loop
         do
                 list2
         done
         list3
 done

• cmd1和cmd2是单一命令,而list1、list2和list3是一个或多个命令的列表。

• list1和 list3可选。

12.13.【嵌套while循环练习】

 练习1:在上例的循环中加一个倒数计时器
 练习2:打印1到10的平方
 练习3:计算1+2+3+…+100=?

// --

x=0
 while [ “$x” –lt 10 ];
 do
         y=“$x”
         while [ “$y –ge 0 ];
         do
                 printf “$y”
                 y=`expr $y – 1`
         echo
 done

12.14.【until循环】

 while循环适合于当某种条件为真时执行一系列命令,而until循环执行一系列命令,直到条件为真时才退出循环。
• 语法如下:
 until cmd
 do
         list
 done

• cmd是一条单独指令,而list是一条或多条命令的集合。Until的执行流程和while类似。
• 1.执行cmd
• 2.如果cmd的退出状态为0,则退出until循环
• 3.如果cmd的退出状态为非0,则执行list
• 4.当list执行完毕,返回步骤1

12.15.【until循环演示】

• 大多数情况下,until循环等价用!操纵符对cmd结果取
反的while循环。
• x=1                                 x=1
• while [ ! $x –ge 10 ]        until [ $x –ge 10 ]
• do                                    do
• echo $x                              echo $x
• x=`expr $x + 1`                   x=`expr $x + 1`
• done                                 done
• 当条件为真时执行            •  当条件为假时执行

12.15.【select循环语法】

• select循环提供了一种简单的方式来创建一种用户可选择的有限菜单。

•  当你需要用户从一个选项列表中选择一项或多项时非常有用。
• 语法:
 select name in word1 word2 …wordN
 do
    list
 done 

• name是变量名
• 执行流程:
• 1.list1中的每一项都跟随着一个数字一起显示
• 2.显示一个命令提示符,通常是#?
• 3.进行了有效的选择后,执行list2
• 4.如果list2没有使用循环控制机制(例如break)来退出select循环,过程重新从步骤1开始。

12.16.【select循环练习】

 #!/bin/bash
 #PS3=‘Select on to execute:’
 select program in ‘ls –F’ 'pwd' 'date' 'df -v'
 do
 $program
 # break
 done

• 改变提示符:通过改变变量PS3来改变select的提示符,如果PS3没有值,就显示缺省提示符#?
• PS3=“==> “
• PS3值把空格作为最后一个字符。这确保了用户输入不会和提示符冲突。

12.17.【循环控制】

• 停止和终止循环使用break和contune命令
 while :
 do
   read cmd
   case $cmd in
       [qQ]|[qQ][uU][iI][tT])break;;
       *)$cmd;;
    esac
 done

• 每一次循环的开始读入一个要执行的命令名,如果命令名是q或quit,则退出循环,否则,循环继续执行相应的命令。

12.18.【循环控制-continue命令】

• contunue命令类似break命令,不同之处在于它只是退
出循环的当前反复过程,而不是整个循环。
 for FILE in $FILES
 do
         if [ ! –f “$FILE” ]; then
                 echo “error:$FILE is not a file.”
                 contune
         fi
 done

-----------------------------------------------------------------------------------------------

你可能感兴趣的:(linux,shell,学习,bash,后端,linux,自动化)