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
//从开头到最后一个逗号的地方删除 (删除最后一个逗号前面的)