shell双层循环
双层循环和循环语句的使用,while和until的 语法使用
echo 打印
echo -n 表示不换行输出
echo -e 输出转义字符
\b:相当于退格键(backspace)
\n:换行,相当于回车键
\f:换行,换行后的新行开头连着上一行的行尾
\t:相当于tab键 横向制表符
echo -ne 即不换行输出制表符
#9*9乘法表
for i in {1..9}
do
for ((j=1;j<=i;j++))
do
echo -ne "$i*$j=$[i*j]\t"
done
echo
done
#倒直角三角形
for ((i=5;i>=1;i--))
do
for ((j=1;j<=i;j++))
do
echo -n $j
done
echo
done
循环控制,continue和break默认数制就是1
#循环控制,break
for i in {..3}
do
for j in {l..5}
00
if [ $j -eq 3 ]
then
break 2
#循环控制,continue和break默认数值就是1.
fi
echo $j
done
#echo $i
done
#循环控制,continue
for i in {..3}
do
for j in {l..5}
00
if [ $j -eq 3 ]
then
continue 2
#循环控制,continue和break默认数值就是1.
fi
echo $j
done
#echo $i
done
exit:满足条件,立刻退出,不论有几层
exit和break类似,但是exit 后面跟任意数字都是直接退出
set -x
#开始调试模式
set +x
#关闭调试模式
while和until
while满足条件就执行循环,不满足条件才会退出
死循环,需要主动结束循环或者打到条件才结束循环。
while[判断条件]
do
命令序列
done
while true #永远为真,就是死循环
while [ 1 -eq 1 ]
while :
until循环:条件不满足才执行循环,一旦条件成立,循环终止
until [ 条件 ]
do
命令序列
done
#测试一个网段,c类的私有地址,32位网段,测试可以ping通的保留到/opt/host.txt,不通,提示不通#
for ping1 in {30..35}
do
{
ping -c 1 192.168.39.$ping1&> /dev/null
if [[ $? -eq 0 ]]
then
echo "ip is online"
echo 192.168.39.$ping1 >> /opt/617test.sh/hosts.txt
else
echo "ip is offline"
fi
}&
#把整个循环体的代码看做一整个内容,相当于并行,&的作用是把循环循环成立的内容放入后台执行
done
wait
#wait的执行结束之后,直接突出。并发执行
{}&
wait
可以大大的节省执行时间
练习
#使用循环语句,将一个0-255的十进制数转换8位的二进制数:
num=$(($RANDOM%256))
a=128
#128为2^7,最高位次
for ((i=1;i<=8;i++))
do
if [[ $num -ge $a ]];then
echo -n 1
#128 64 32 16 8 4 2 1如果随机数比a大则输出1,没有则输出0
let num-=$a
else
echo -n 0
fi
a=$[a/2]
#每一个位置都是a/2的值
done
echo ""
#用户名存放在users.txt文件中,每行一个。判断文件里的用户名是否存在
#如果用户用户存在,提示用户已存在
#用户存在,但是没有设置密码,要提示用户设置密码
#用户不存在,创建用户,然后给用户创建密码
#cat /etc/passwd | awk -F: `{print $1}` | grep "$user"
#cat /etc/shadow | grep "$user" | awk -F: '{print $2}'
for user in $(cat /opt/users.txt)
do
cat /etc/passwd | awk -F: '{print $1}' | grep "$user"
if [[ $? -eq 0 ]]
then
echo "用户名存在"
mima=$(cat /etc/shadow | grep "$user" | awk -F: '{print $2}')
if [ "$mima" == "!!" ] || [ -z "$mima" ]
then
echo "用户没有设置密码,请设置密码"
fi
else
echo "用户名不存在,请创建用户名和密码"
echo "创建用户,用户密码123"
useradd -n $user
echo 123 | passwd --stdin $user
fi
done
标签:do,shell,控制,echo,while,循环,done,user
From: https://blog.csdn.net/cycjok/article/details/139748230