shell 编程之循环语句 echo用法

Posted 呼噜呼噜懒洋洋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 编程之循环语句 echo用法相关的知识,希望对你有一定的参考价值。

循环语句

for语句结构

读取不同的变量值,用来逐个执行同一组命令
格式:
for 变量名 in 取值列表
do
命令序列
done

语法逻辑;shell

案例1:
批量添加用户
用户名存放在users.txt文件中, 每行一个
初始mima均设为123456
验证脚本

脚本:
#!/bin/bash
users=$(cat /etc/passwd | awk -F: print $1)

for name in $(cat ~/user.txt)
do
echo $users | grep $name &> /dev/null
if [ $? -eq 0 ]
then
echo "$name 已存在"
else
echo "正在创建 $name 用户并设置mima"
useradd $name
echo 123456 | passwd --stdin $name &> /dev/null
fi
done

shell

shell

示例2
根据IP地址检查主机状态
IP地址存放在hostlist.txt文件中,每行一个
使用ping命令检测各主机的连通性

脚本:
#shell实现多线程
#!/bin/bash
for ip in 192.168.80.1..254
do

ping -c 3 -i 0.5 -w 2 $IP &> /dev/null
if [ $? -eq 0 ];then
echo "$IP online" >> /opt/hostlist.txt
else
echo "$IP off" >> /opt/hostlist.txt
fi
&
done
wait
cat /opt/hostlist.txt

#在命令后而增加了&标记,意思是将进程扔到后台。
在shell中,后台命令之间是不区分先来后到关系的。
#wait会等待到所有的后台程序执行完毕再执行后而的shell语句。
如果没有wait,后而的shel1语句是不会等待后台进程的,一些对前面后台进程有依赖
关系的命令执行就不正确了。

shell

shell

while 语句结构

解释:重复测试某个条件,只要条件成立则反复执行
格式:
while 条件测试操作
do
命令序列
done
示例:
#!/bin/bash
a=1
while[$a -ge 1 -a $a -le 10
do
echo $a
let a++
done

shell

逻辑列表:shell

案例1:
批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1、 stu2、 ..... stu20
初始mima均设为123456

脚本:
#!/bin/bash
name=1
while [ $name -ge 0 -a $name -le 20 ]
do
useradd stu$name
echo 123456 | passwd --stdin stu$name
let name++
done

shell

shell

案例2:guess.sh
猜商品价格游戏
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环

脚本:
#!/bin/bash
CURRENT=$[RANDOM % 1000]
a=1
num=0
while [ $a -eq 1 ]
do
read -p "请输入你猜测的价格(0-999):" price
if [ $price -gt $CURRENT ];then
echo "猜高了,请重试!"
let num++
elif [ "$price" -lt "$CURRENT" ];then
echo "猜低了,请重试!"
let num++
elif [ "$price" -eq "$CURRENT" ];then
let num++
echo "猜对了,正确价格为$price,你猜了 $num次"
let a++
fi
done

shell

shell

until 语句结构

解释:复测试某个条件,只要条件不成立则反复执行
格式:
until条件测试操作
do
命令序列
done
示例:
#!/bin/bash
a=1
until[$a -gt 10]
do
echo $a
let a++
done

shell

案例1  
●为指定用户发送在线消息
若用户不在线(未登录系统),则每10分钟试-次,直至用
户登录系统后在发送信息
用户名与消息通过位置参数传递给脚本

脚本:
#!/bin/bash
# example: ./write.sh <USERNAME> [ message ]
username=$1
msg=$2

#用于判断执行脚本的格式是否携带了位置参数
if [ $# -lt 1 ];then
echo "USAGE: $0 <USERNAME> [message] "
exit 1
fi

#用于判断携带的用户名参数是否正确
grep "^$username:" /etc/passwd > /dev/null
if [ $? -ne 0 ];then
echo "$username 不是系统用户!"
exit 2
fi

#用户判断系统用户是否已登录
who | grep "$username" > /dev/null
while [ $? -ne 0 ]
#until [ $? -eq 0 ]
do
echo "$username 尚未登录系统,请先登录!"
sleep 10
done

if [ -z "$msg"];then
msg="hello $username,this is default message"
echo "执行命令:echo $msg | write $username"
else
echo "执行命令:echo $msg | write $username<

以上是关于shell 编程之循环语句 echo用法的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本——编程之循环语句(forwhileuntil)

for / while / until 基础循环语句案例图解 shell编程之循环语句

Shell脚本编程之循环语句

shell循环语句

Shell脚本之循环语句(forwhileuntil)

Shell编程——case语句与循环语句