1. 编写脚本,实现人机<石头,剪刀,布>游戏
#!/bin/bash
game=(
石头 剪刀 布
)
num=$[RANDOM%3]
computer=${game[$num]}
#
通过随机数获取计算机的出拳
#
出拳的可能性保存在一个数组中,
game[0],game[1],game[2]
分别是
3
中不同的可能
echo "
请根据下列提示选择您的出拳手势
"
echo "1.
石头
"
echo "2.
剪刀
"
echo "3.
布
"
read ‐p "
请选择
1‐3:" person
case $person in
1)
if [ $num ‐eq 0 ];then
echo "
平局
"
elif [ $num ‐eq 1 ];then
echo "
你赢
"
else
echo "
计算机赢
"
fi;;
2)
if [ $num ‐eq 0 ];then
echo "
计算机赢
"
elif [ $num ‐eq 1 ];then
echo "
平局
"
else
echo "
你赢
"
fi;;
3)
if [ $num ‐eq 0 ];then
echo "
你赢
"
elif [ $num ‐eq 1 ];then
echo "
计算机赢
"
else
echo "
平局
"
fi;;
*)
echo "
必须输入
1‐3
的数字
"
esac
2. 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
状态(for 版本)
#!/bin/bash
for i in {1..254}
do
ping ‐c2 ‐i0.3 ‐W1 192.168.4.$i &>/dev/null
if [ $? –eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
done
3. 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
状态(while 版本)
#!/bin/bash
i=1
while [ $i ‐le 254 ]
do
ping ‐c2 ‐i0.3 ‐W1 192.168.4.$i &>/dev/null
if [ $? –eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
let i++
done
4. 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
状态(多进程版)
#!/bin/bash
#
定义一个函数,
ping
某一台主机,并检测主机的存活状态
myping(){
ping ‐c2 ‐i0.3 ‐W1 $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
第二台主机,依次类推。
5. 编写脚本,显示进度条
#!/bin/bash
jindu(){
while :
do
echo ‐n '#'
sleep 0.2
done
}
jindu &
cp ‐a $1 $2
killall $!
echo "
拷贝完成
''
6. 进度条,动态时针版本
#!/bin/bash
#
定义一个显示进度的函数,屏幕快速显示
| / ‐ \
rotate_line(){
INTERVAL=0.1 #
设置间隔时间
COUNT="0" #
设置
4
个形状的编号,默认编号为
0
(不代表任何图像)
while :
do
COUNT=`expr $COUNT + 1` #
执行循环,
COUNT
每次循环加
1,
(分别代表
4
中不同的形状)
case $COUNT in #
判断
COUNT
的值,值不一样显示的形状就不一样
"1") #
值为
1
显示
‐
echo ‐e '‐'"\b\c"
sleep $INTERVAL
;;
"2") #
值为
2
显示
\\
,第一个
\
是转义
echo ‐e '\\'"\b\c"
sleep $INTERVAL
;;
"3") #
值为
3
显示
|
echo ‐e "|\b\c"
sleep $INTERVAL
;;
"4") #
值为
4
显示
/
echo ‐e "/\b\c"
sleep $INTERVAL
;;
*) #
值为其他时,将
COUNT
重置为
0
COUNT="0";;
esac
done
}
rotate_line
7. 9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)
#!/bin/bash
for i in `seq 9`
do
for j in `seq $i`
do
echo ‐n "$i*$j=$[i*j] "
done
echo
done
8. 使用死循环实时显示 eth0 网卡发送的数据包流量
#!/bin/bash
while :
do
echo '
本地网卡
eth0
流量信息如下
: '
ifconfig eth0 | grep "RX pack" | awk '{print $5}'
ifconfig eth0 | grep "TX pack" | awk '{print $5}'
sleep 1
done
9. 使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码
#!/bin/bash
#
本脚本执行,需要提前准备一个
user.txt
文件,该文件中包含有若干用户名信息
for i in `cat user.txt`
do
useradd $i
echo "123456" | passwd ‐‐stdin $i
done
10. 编写批量修改扩展名脚本,如批量将 txt 文件修改为 doc 文件
#!/bin/bash
#
执行脚本时,需要给脚本添加位置参数
#
脚本名
txt doc
(可以将
txt
的扩展名修改为
doc
)
#
脚本名
doc jpg
(可以将
doc
的扩展名修改为
jpg
)
for i in "ls *.$1"
do
mv $i ${i%.*}.$2
done