ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-07-26 08:35:37  阅读:161  来源: 互联网

标签:do Shell 字符 echo while 循环 done until


for循环语句

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

 格式 :

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

 

 

 

 

 示例

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循环语句

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

 

格式 :

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

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

 

 

标签:do,Shell,字符,echo,while,循环,done,until
来源: https://www.cnblogs.com/zhouruan/p/15034258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有