Shell脚本------循环语句(for,while,until循环语句)
Posted 下雨天的放羊娃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本------循环语句(for,while,until循环语句)相关的知识,希望对你有一定的参考价值。
目录
一.echo语句
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上
✪常用的转义字符
\\b :转义后相当于按退格键,但前提是“\\b
”后面存在字符;“\\b
”表示删除前一个字符,“\\b\\b
”表示删除前两个字符。
\\c:不换行输出,在“\\c
”后面不存在字符的情况下,作用相当于echo -n
,但是当“\\c
”后面仍然存在字符时,“\\c
”后面的字符将不会被输出。
\\n:换行,被输出的字符从“\\n
”处开始另起一行。
\\f:换行,但是换行后的新行的开头位置连接着上一行的行尾;\\v
与\\f
相同。
\\t 转义后表示插入tab
,即横向制表符
\\r:光标移至行首,但不换行,相当于使用“\\r
”以后得字符覆盖“\\r
”之前同等长度的字符;但是当“\\r
”后面不存在任何字符时,“\\r”前面的字符不会被覆盖。
\\:表示插入“\\
”本身。
✪示例
1.通过输出转义子符实现磁盘分区
✪截取字符串
i=`echo "11,22,33, 44"`
echo ${i%,*}
11,22, 33
//从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%%,*}
l1
//从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i#*, }
22,33, 44
//从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i##*,}
44
//从开头到最长的匹配部分(用##)后面的逗号的地方被删除
i=`echo “1234567890”`
echo ${i:3:4}
4567
//从第3位开始截取,第一位为0,截取4位,中间用“:”隔开
二.循环语句
1.for循环语句
读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表 for 收件人 in 邮件地址列表
do do
命令序列 发送邮件
done done
✪for循环的三种表达方式
❉第一种
❉第二种
❉第三种
✪示例
❉1.批量添加用户
用户名存放在user.txt文件中,每行一个
初始密码均为666
#!/bin/bash
USER=$(cat /scripts/user.txt)
for i in $USER
do
useradd $i
echo 666 | passwd --stdin $i &> /dev/null
done
sh user.sh
❉2.根据IP地址检查主机状态
IP地址存放在ipadds.txt文件中,每行一个
使用ping命令检测各主机的连通性
vim ip.sh
#!/bin/bash
IP=`cat /script/ipadds.txt`
for i in $IP
do
ping -c 5 -i 0.2 -w 2 $i &> /dev/null
if [ $? -eq 0 ]
then
echo "$i主机存活"
else
echo "$i主机不存活"
fi
done
sh ip.sh
2.while语句的结构
重复测试某个条件,只要条件成立则反复执行
while 条件测试操作
do
命令序列
done
✪示例
❉1.批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1,stu2,……,stu20
初始密码均为666
vim 2.sh
#!/bin/bash
a=1
while [ $a -le 20]
do
useradd stu$a
echo 666 | passwd --stdin stu$a
let a++
done
sh 2.sh
❉2.猜商品价格
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环
vim 3.sh
#!/bin/bash
ran=$[ $RANDOM % 1000 ]
a=1
b=0
while [ $a -lt 2 ]
do
read -p "请输入你猜的价格(1-999):" cai
if [ $cai -eq $ran ]
then
echo "恭喜你你猜对了!"
let b++
let a++
elif [ $cai -gt $ran ]
then
echo "你猜高了!"
let b++
elif [ $cai -lt $ran ]
then
echo "你猜低了!"
let b++
fi
done
3.until语句
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
✪示例
计算1-50的和值
通过循环累加的方式计算1-50的和值
三.终止循环
1.break跳出单个循环
#!/bin/bash
for ((a=1;a<=5;a++))
do
echo "外循环--------:a=$a"
for ((b=1;b<=5 ;b++))
do
if [ $b -eq 3 ]
then
break
fi
echo -e "\\t内循环-------:b=$b" \\t为横向制表符
done
done
2.continue中止某次循环中的命令,但不会完全中止整个命令
#!/bin/bash
for ((a=1;a<=5;a++))
do
echo "外循环--------:a=$a"
for ((b=1;b<=5 ;b++))
do
if [ $b -eq 3 ]
then
continue
fi
echo -e "\\t内循环-------:b=$b"
done
done
示例
用户输入密码,脚本判断密码是否正确,输入正确提示提示正确信息,连续输错3次则报警
#!/bin/bash
ma=123456
for ((i=1;i<=3;i++))
do
read -p "请输入密码:" a
if [ $a -eq $ma ]
then
echo "密码输入正确!"
exit
else
echo "密码输入错误,请再次输入"
fi
done
echo "警告,密码错误3次。"
四.IFS字段分隔符
默认包含空格( ),制表符(\\t) ,换行符(\\n)
set | grep IFS 查看IFS字段分隔符
示例
输出环境变量PATH所包含的所有目录以及其中的所有可执行文件
#!/bin/bash
#PATH所包含的所有目录以及其中的所有可执行文件
dz=$IFS
IFS=$IFS:
for i in $(echo $PATH)
do
echo "PATH所包含的目录:" $i
for a in $i/*
do
if [ -x $a ]
then
echo "其中的可执行文件:" $a
fi
done
done
IFS=$dz
以上是关于Shell脚本------循环语句(for,while,until循环语句)的主要内容,如果未能解决你的问题,请参考以下文章
浅谈Shell脚本中for循环while循环及case分支语句