shell脚本实用案列
- 添加用户
#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1 &> /dev/null
2、打包log
#!/bin/bash
tar -zcvf /root/log/log-`date +%Y%m%d-%H:%M:%S`.tar.gz /var/log
- 打包/var/log 文件加时间戳 加入crontab
#!/bin/bash
tar -zcvf /root/log/log-`date +%Y%m%d-%H:%M:%S`.tar.gz /var/log
Crontab -e
0 0 * * *
| | | | |
| | | | ±---- 星期 (0 - 7) (Sunday=0 or 7)
| | | ±--------- 月 (1 - 12)
| | ±-------------- 日 (1 - 31)
| ±------------------- 时 (0 - 23)
±------------------------ 分 (0 - 59)
3. 硬盘内存报警
#!/bin/bash
disk_size=$(df | awk '/\/$/{print $4}')
echo $disk_size
mem_size=$(free | awk '/Mem/{print $4}')
echo $mem_size
while :
do
if [ $disk_size -le 512000 -o $mem_size -le 1024000 ]; then
echo "资源不足"
else
echo "ok"
fi
done
- 100取余随机数猜数字
#!/bin/bash
num=$[RANDOM%100+1]
echo $num
while :
do
read -p "计算一个100内的随机数:" cai
if [ $cai -eq $num ];then
echo "猜对了"
elif [ $cai -gt $num ];then
echo "猜大了"
else
echo "猜小了"
fi
done
- 判断是否为root用户并安装open-server
#!/bin/bash
if [ $USER == "root" ];then
yum -y install open-server
else
echo "不是超级管理员"
fi
- 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。
#!/bin/bash
read -p "输入账户:" user
read -p "输入密码:" pass
if [ -z $user ];then
echo "必须输入账号"
exit 2
fi
if [ -z $pass ];then
pass=123456
useradd $user
echo $pass | passwd --stdin $user
else
useradd $user
echo $pass | passwd --stdin $user
fi
- 输入三个数并进行升序排序
#!/bin/bash
read -p "输入数字" a
read -p "输入数字" b
read -p "输入数字" c
tem=0
if [ $a -gt $b ];then
tem=$a
a=$b
b=$tem
fi
echo $a, $b, $c
if [ $b -gt $c ];then
tem=$b
b=$c
c=$tem
fi
echo $a, $b, $c
if [ $a -gt $b ];then
tem=$a
a=$b
b=$tem
fi
echo $a, $b, $c
- 石头、剪刀、布游戏
#!/bin/bash
game=(石头 剪刀 不)
#nu=$(($RANDOM%3))
while :
do
game1=${game[$(($RANDOM%3))]}
read -p "输入石头剪刀布:" cai
if [ $cai == $game1 ];then
echo "猜对了"
break
else
echo "猜错了,继续"
fi
done
- 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)
#!/bin/bash
for ip in 192.168.0.{1..254}
do
echo $ip
ping -c 2 -W 1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is up"
else
echo "$ip is down"
fi
done
wait
- 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(多进程版)
#!/bin/bash
# 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
# 状态(多进程版)
#定义一个函数,ping 某一台主机,并检测主机的存活状态
myping(){
ping ‐c 2 ‐i 0.3 ‐W 1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
}
for i in {1..254}
do
myping 192.168.4.$i &
done
# 使用&符号,将执行的函数放入后台执行
# 这样做的好处是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,依次类推。
————————————————
版权声明:本文为CSDN博主「baiduoWang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yugemengjing/article/details/82469785
- 编写脚本,显示进度条
$0 :shell文件本身名
这里拓展以下:
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
“ ” ∗ 所 有 参 数 列 表 。 如 ” ”* 所有参数列表。如” ”∗ 所有参数列表。如”*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
@ 所 有 参 数 列 表 。 如 ” @ 所有参数列表。如” @ 所有参数列表。如”@”用「”」括起来的情况、以”$1″ “ 2 ” … “ 2” … “ 2”…“n” 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
1 ~ 1~ 1~n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
#!/bin/bash
#显示$! 必须赋予脚本可执行权限,
progress_bar(){
while :
do
echo -n "#"
sleep 0.2
done
}
progress_bar & #后台运行
pid=$! #查看后台运行的pid
cp -a /etc /backup
sleep 5
kill $pid #删除后台运行函数 progress_bar
echo "ok"
- 进度条,动态时针版本;定义一个显示进度的函数,屏幕快速显示| / ‐ \
#!/bin/bash
count=0
while :
do
count=`expr $count + 1`
case $count in
1)
echo -e "-""\b\c"
sleep $time
;;
2)
echo -e '\\'"\b\c"
sleep $time
;;
3)
echo -e "|""\b\c"
sleep $time
;;
4)
echo -e "/""\b\c"
sleep $time
;;
*)
count=0
esac
done
}
dongtai
- 9*9 乘法表
#!/bin/bash
for((i=1;i<=9;i++))
do
for((j=1;j<=i;j++))
do
echo -e "$j*$i""\t\c"
done
echo ""
done
- 使用死循环显示 eth0 网卡发送的数据包流量
#!/bin/bash
while :
do
rx=$(ifconfig ens33 | grep "RX packets" | awk '{print $3}')
tx=$(ifconfig ens33 | grep "TX packets" | awk '{print $3}')
echo "RX:$rx"
echo "TX:$tx"
sleep 2
done
- 使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
for版本
#!/bin/bash
for i in `cat /root/shell/user.txt`
do
useradd $i
echo "123456" | passwd --stdin $i
done
while版本
#!/bin/bash
cat user.txt | while read line
do
useradd $i
echo "123456" | passwd --stdin $i
done
while版本
#!/bin/bash
while read line
do
echo $line
done < user.txt
- List item