#!/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...."