1、echo的使用
echo 打印
-n 不换行输出
-e 可以输出转义字符
转义字符:\b 相当于退格键 \n 换行,相当于回车 \f 换行,换行后的新行的开头连着上一行的行尾
\t 相当于tab键 相当于一个大空格 横向制表符
echo -ne既可以输出但又不换行
2、break、continue、exit
break 2 循环控制 continue和break 默认数值就是2(2层的意思)
exit:满足条件立刻退出
3、调试
set -x 开启调试
set +x 关闭调试
4、while和until的语法:
while:满足条件执行循环,不满足才会退出
适应死循环,不知道循环多少次,需要主动结束循环或者达到条件才结束循环
while [判断条件]
do
命令序列
done
while死循环格式:
while true #永远为真,死循环
while [ 1 -eq 1 ]
while :
until循环:条件不满足才执行循环,一旦条件成立循环终止。
until [ 条件测试 ]
do
命令序列
done
实例1:分别求出1-100奇数偶数和
i=0
sum1=0
sum2=0
while [ $i -lt 100 ]
do
let i++
if [[ $(($i%2)) -eq 0 ]]
then
sum1=$(($sum1+$i))
else
sum2=$(($sum2+$i))
fi
done
echo $sum1
echo $sum2
实例2:测试一个网段,c类的私有地址 32类的网段,测试可以ping通的保留到/opt/hosts.txt,ping不通的提示不通
# 并行处理 ping 命令
for ((i=1; i<=254; i++)) do
#把整个循环体的代码看做一个整个内容,相当于并行,&循环成立的内容放入后台执行
{
if ping -c 3 192.168.10.$i &> /dev/null; then
echo $i >> /opt/hosts.txt
else
echo "192.168.10.$i ping不通"
fi
}&
done
# 等待所有后台进程完成,直接突出,并发执行
wait
echo "Ping操作完成,存活的主机记录在 /opt/hosts.txt 文件中。"
实例3:定义好了一个密码,判断密码输入是否正确,正确的密码是123456 输入正确提示正确 输入3次错误被提示
passwd=123456
for((i=1;i<=3;i++))
do
read -p "请输入密码:" passwd1
if [[ $passwd1 == $passwd ]]
then
echo "密码正确"
exit
else
echo "密码输密码错误"
fi
done
echo "密码输入错误3次被锁定"
实例4:
用户名存放在users.txt文件中,每行一个,判断文件里的用户名是否存在
如果用户存在,提示用户已存在
用户存在但是没有设置密码,要提示用户设置密码
用户不存在,创建用户,然后给用户创建密码
for user in $(cat /opt/users.txt)
do
cat /etc/passwd | awk -F: '{print $1}' | grep "$user"
if [[ $? -eq 0 ]]
then
#用户存,判断密码
jieuo= cat /etc/shadow | grep "$user" | awk -F: '{print $2}'
#判断密码是否为空
if [[ "$jieguo" == "!!" || -z "$2" ]]
then
read -p "请设置密码:" psd
echo $psd | passwd --stdin $user
else
break
fi
else
echo "用户不存在"
useradd "$user"
read -p "请设置密码:" psd1
echo $psd1 | passwd --stdin $user
fi
done
实例5:使用循环语句,将一个0-255的十进制数转换成8位的二进制数
read -p "请输入一个十进制的数:" num
#输出一个8位的数
if [[ $num -ge 0 && $num -le 255 ]]
then
for ((i=1;i<8;i++))
do
#将结果逆序输出
jieguo=$(($num%2))$jieguo
num=$(($num/2))
done
echo -n "$jieguo"
else
echo "输入错误请重新输入!"
fi