Shell编程之循环语句 (for、while、until)

for循环语句

读取不同的变量值,用来逐个执行同一组命令(遍历)

 格式 :

for  变量名  in  取值列表                或者             for  ((c初始变量;循环条件;循环条件变更))
do                                                     do
    命令序列                                                 命令序列
done                                                   done

 

 Shell编程之循环语句 (for、while、until)

 

 

 示例

for i in $(seq 1 10)                         for ( (i=1; i<=10; i++))
do                                                 do
   echo  $i                                           echo  $i  
done                                              done

 

 

实例操作:根据IP地址检查主机状态

#!/bin/bash
#Check host status based on IP address
 
for i in `cat /root/ipadds.txt`               #####把要查询的主机IP写入此目录中 用for遍历查询
do
  ping -c 3 -i 0.5 -w 2 $i &> /dev/null       #####ping IP  如果在线 $? 为0 反之 不在线
  if [ $? -eq 0 ];then
     echo "$i is online"
  else
     echo "$i is offline"
  fi
done

 

 

while循环语句

重复测试某个条件,只要条件成立则反复执行(迭代)

格式 :

while循环:while的中文是【当…时】,所以这种方式说的是,当判断式/命令序列的条件成立时,就进行循环,直到命令序列/程序段落的条件不成立才停止。

while  [ 条件测试操作 ]
do                      #do代表循环的开始
    判断式/命令序列
done                    #done代表循环的结束

 

 

示例 :

a=1                           ###while 循环要先赋值
while [ $a -le 10 ]          
>do
>echo $a
>let a++                      ###while循环要迭代不然会死循环
>done

实例操作一:批量添加用户,并设置密码为123456

 

#!/bin/bash
#Batch add users
 
a=1
while [ $a -le 20 ]
do
   useradd stu$a
   echo "123456" | passwd --stdin stu$a &> /dev/null
let a++
done

 until循环语句

重复测试某个条件只要条件不成立则反复执行

Shell编程之循环语句 (for、while、until)

 

格式 :

until  条件测试操作
do
        命令序列
done

 

示例 :计算1-50的和值

#!/bin/bash

a=1                               #设置 变量a的 初始值为1
sum=0                             #sum 用来接计算的和值 
until [ $a -gt 50 ]               #until 条件不成立时循环。 当a 值 大于50 时,退出循环。
do
    sum=$[$sum + $a ]             #每次循环,变量sum的值 都为原 sum 值加上变量a的值 .最后的值,即为1到50 的和值
    let a++                       #每次循环,变量 a 的值+1
done
  
echo "从1 到 50 的和值是 $sum"      #打印 1-50 的和值

 

 

echo的使用

echo -n表示不换行输出 回声-n表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上

常用的转义字符如下: 
\b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo -n;
   但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。 
\n 换行,被输出的字符从"\n"处开始另起一行。
\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v与\f相同;
\t转以后表示插入tab,即横向制表符; 转以后表示插入标签,即横向制表符;
\r 
光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖 

 

         i=`echo "11,22,33,44"

echo ${i%,*}

11,22,33

//从最后开始到倒数第一个使用逗号的地方删除  (只删最后一个逗号后面的)

 

echo ${i%%,*}

11

//从最后开始到第一个使用逗号的地方删除      ( 删第一个逗号后面的)

 

echo ${i#*,}

22,33,44

//从开头到第一个逗号的地方删除      (删除第一个逗号前面的)

 

echo ${i##*,}

44

//从开头到最后一个逗号的地方删除  (删除最后一个逗号前面的)

 Shell编程之循环语句 (for、while、until)

 

上一篇:Shell循环 - while和until


下一篇:Centos 中如何快速定制二进制的内核 RPM 包