shell脚本 --- 循环及并发控制

#!/bin/bash

read -p "input os_version : " os_version

if [ "$os_version" = "7.3" ];then
    cat >/etc/aaa <<-EOF      #就是讲下面的内容写到/etc/aaa中
    name=cj
    passwd=cj
    EOF
elif ["$os_version" = "6.4" ];then
    cat >/etc/bbb <<-EOF
    name=gx
    passwd=gx
    EOF
fi
#!/bin/bash
IFS=$'\n'      #按换行分割
for i in `cat ./bbb`
do
        echo $i
done

一、 for 语法结构
 

Shell:


for 变量名 [ in 取值列表 ]
do
循环体
done


C 语言:


for ((初值;条件;步长))
do
循环体
done


Seq的使用

 

for i `seq 1 2 100`

do

echo $i

done

写一个是shell脚本,判断tmp下是否存在普通文件aa.txt,文件存在则输出文件详细信息,文件不存在则创建文件

#!/bin/bash
if [ -f ./aa.txt ];then
        cat ./aa.txt
else
        >./aa.txt
fi
~     

案例 1: ping 测试主机    pingTest.sh
 

#!/bin/bash
>ip.txt

for i in {2..254}
do
    {
        ip=192.168.122.$i
        ping -c1 -W1 $ip &>/dev/null
        if [ $? -eq 0 ];then
            echo "$ip" | tee -a ip.txt
        fi
    }&   #放在后台
done
wait     #等待上面都执行完,下面的才会执行
echo "finished...."

time pingTest.sh     统计程序与运行时间

 

案例 1: 通过用户列表文件创建用户


[root@tianyun scripts]# cat user.txt
zhuzhu1          111
yang1              222
zhang2            333

#!/bin/bash
if [ $# -eq 0 ];then
	echo "参数不能为0"
	exit 1
fi

if [ ! -f $1 ];then
	echo "error file"
	exit 2
fi

#按回车分割
IFS=$'\n'
for line in `cat $1`
do
	user=`echo "$line" | awk -F"\t" '{print $1}'`
	pass=`echo "$line" | awk -F"\t" '{print $2}'`
	id $user &>/dev/null
	if [ $? -eq 0 ];then
		echo "user $user already exists"
	else
		useradd $user
		echo "$pass" | passwd --stdin $user &>/dev/null
		if [ $? -eq 0 ];then
			echo "$user is created."
		fi
	fi
done

 案例 2: 修改配置文件

#!/bin/bash
#!/bin/bash
for ip in `cat ip.txt`
do
        {
                ping -c1 -w1 $ip &>/dev/null
                if  [ $? -eq 0 ];then
                        ssh $ip "sed -ri '/^#UseDNS/cUseDNS no' /etc/ssh/sshd_config"
                        ssh $ip "systemctl stop firewalld; systemctl disable firewalld"
                fi
        }&

done
wait
echo "finished...."

While

 

while read user
do
        useradd $user
done < $1

until   和while 相反

 

#!/bin/bash
ip=10.18.42.127
until ping -c1 -w1 $ip &>/dev/null
do 
    sleep 1     #如果ping不通就执行do
done
echo "$ip is up"

并发控制

#!/bin/bash
thread=5
tmp_fifofile=/tmp/$$.fifo

mkfifo $tmp_fifofile
exec 8<> $tmp_fifofile
rm $tmp_fifofile

for i in `seq $thread`
do
    echo >&8
done


for i in {2..254}
do
    read -u 8
    {
        ip=192.168.122.$i
        ping -c1 -W1 $ip &>/dev/null
        if [ $? -eq 0 ];then
            echo "$ip is up"
        else
            echo "$ip is down"
        fi
        echo >&8
    }&   #放在后台
done
wait     #等待上面都执行完,下面的才会执行
echo "finished...."


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡搜偶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值