Shell脚本练习一部曲
Posted Zmac111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本练习一部曲相关的知识,希望对你有一定的参考价值。
Shell脚本练习一部曲
- 1、检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
- 2、提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
- 3、用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
- 4、提示用户输入内容,使用if 语句判断输入的内容是否为整数。再判断输入的内容是奇数还是偶数
- 5、用if 语句判断主机是否存活
- 6、用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
- 7、计算从1到100所有整数的和
- 8、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
- 9、求从1到100所有整数的偶数和、奇数和
- 10、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
- 11、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
- 12、用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
- 13、编写能够自动生成一个8位随机密码的脚本
- 14、写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
1、检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
#!/bin/bash
if [ -f ~/test.sh ];then
echo "test.sh文件存在"
if [ -x ~/test.sh ];then
echo "test.sh有可执行权限"
else
echo "没有可执行权限"
fi
else
echo "文件不存在"
fi
2、提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
#!/bin/bash
read -p "请输入100米赛跑的秒数:" time
if
[ $time -gt 0 -a $time -lt 10 ] &> /dev/null;then
echo "恭喜你已进入选拔赛!"
read -p "请输入你的性别(男或女):" xingbie
case $xingbie in
男)
echo "你已进男生组"
;;
女)
echo "你已进女生组"
;;
*)
echo "错误!"
esac
elif
[ $time -gt 10 ] &> /dev/null;then
echo "很遗憾,你已被淘汰"
else
echo "请重新输入"
fi
3、用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
先要创建一个压缩文件
#!/bin/bash
read -p "请输入压缩包名称:" a
case $a in
*.tar.gz)
if [ -f $a ];then
tar -zxvf $a -C /opt &> /dev/null
else
echo "$a 不存在"
fi
;;
*.tar.bz2)
if [ -f $a ];then
tar -jxvf $a -C /opt &> /dev/null
else
echo "$a 不存在"
fi
;;
*)
echo "文件输入错误"
esac
4、提示用户输入内容,使用if 语句判断输入的内容是否为整数。再判断输入的内容是奇数还是偶数
#!/bin/bash
read -p "请输入内容:" a
if [ $a = 0 ];then
echo "0是偶数"
else
let i=a+0 &> /dev/null
if [ $? = 0 ];then
echo "$a是整数"
b=$[a % 2 ]
case $b in
0)
echo "$a是偶数"
;;
*)
echo "$a是奇数"
esac
else
echo "$a不是整数"
fi
fi
5、用if 语句判断主机是否存活
#!/bin/bash
read -p "请输入主机ip:" a
ping -c 3 -i 0.5 -w 2 $a &> /dev/null
if [ $? -eq 0 ]
then
echo "$a is online"
else
echo "$a is offline"
fi
6、用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
加入服务管理用chkconfig命令
init.d 介绍
(1)init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本。
(2)用service命令可执行init.d目录中相应服务的脚本。
cd /etc/init.d
vim firewalld
#!/bin/bash
#description: Firewalld Service Control Script
case "$1" in
start)
echo "Starting firewawlld Server..."
systemctl start firewalld
;;
stop)
echo "Stopping firewawlld Server..."
systemctl stop firewalld
;;
restart)
echo "Restarting firewawlld Server..."
systemctl restart firewalld
;;
status)
echo "Firewalld status is ..."
systemctl status firewalld
;;
*)
echo "用法: $0 {start|stop|restart|status}"
esac
chmod +x firewalld
service firewalld statudds
用法: /etc/init.d/firewalld{start|stop|restart|status}
chkconfig --add firewalld
chkconfig firewalld on #将firewalld 加入开机启动
7、计算从1到100所有整数的和
方法1 (for循环)
#!/bin/bash
a=1
sum=0
for ((a=1;a<=100;a++)) 或for a in {1..100} 或for a in $(seq 1 100)
do
sum=$[$sum+$a]
done
echo "1-100的和为:$sum"
方法2(while循环)
#!/bin/bash
a=1
sum=0
while [ $a -le 100 ]
do
sum=$[$sum+$a]
let a++
done
echo "1-100的和为 $sum"
方法3(until循环)
#!/bin/bash
a=1
sum=0
until [ $a -gt 100 ]
do
sum=$[$sum+$a]
let a++
done
echo "1-100的和为: $sum"
8、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
方法1(while循环)
#!/bin/bash
a=1
sum=0
read -p "请输入一个整数(小于100): " b
while [ $a -le $b ]
do
sum=$[$sum+$a]
let a++
done
echo "1到$b的整数和为:$sum"
方法2(for循环)
#!/bin/bash
a=1
sum=0
read -p "请输入一个整数(小于100):" b
for ((a=1;a<=$b;a++))
do
sum=$[$sum+$a]
done
echo "1到$b的和为:$sum"
方法3(until循环)
#!/bin/bash
a=1
sum=0
read -p "请输入一个整数(小于100): " b
until [ $a -gt $b ]
do
sum=$[$sum+$a]
let a++
done
echo "1到$b的整数和为:$sum"
9、求从1到100所有整数的偶数和、奇数和
方法1(for循环)
#!/bin/bash
a=1
sum1=0
for a in $(seq 1 2 100)
do
sum1=$[$sum1+$a]
done
echo "1到100所有整数奇数的和:$sum1"
b=0
sum2=0
for ((b=0;b<=100;b+=2))
do
sum2=$[$sum2+$b]
done
echo "1到100所有整数偶数的和为:$sum2"
方法2(if+for)
#!/bin/bash
ji=0
ou=0
for i in {1..100}
do
if [ $[$i % 2] -eq 0 ]
then
ou=$[$ou+$i]
else
ji=$[$ji+$i]
fi
done
echo "奇数和为:$ji"
echo "偶数和为:$ou"
10、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash
read -p "输入你要查找的用户:" user
id $user &> /dev/null
a=`echo $?`
while [ $a -eq 0 ]
do
echo "此用户已存在!"
break
done
while [ $a -ne 0 ]
do
echo "该用户不存在,将创建新用户,请输入密码!"
useradd $user
read -p "请输入密码:" passwd
echo $passwd | passwd --stdin $user
echo "用户新建成功,密码设置成功!"
break
done
11、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
方法1
#!/bin/bash
read -p "请输入检测主机ip的第一个字段:" a
read -p "请输入检测主机ip的第二个字段:" b
read -p "请输入检测主机ip的第三个字段:" c
read -p "请输入检测主机ip的起始地址:" qi
read -p "请输入检测主机ip的末端地址:" mo
for ((i=$qi;i<=$mo;i++))
do
ping -c 3 -i 0.5 -w 2 $a.$b.$c.$i &> /dev/null
true=`echo $?`
if [ $true -eq 0 ]
then
echo $a.$b.$c.$i >> ~/host_ip
fi
done
方法2
#!/bin/bash
for i in 192.168.19.{1..10}
do
ping -c 3 -i 0.5 -w 2 $i &> /dev/null
true=`echo $?`
if [ $true -eq 0 ]
then
echo $i >> ~/host_ip
fi
done
12、用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
n=3
password=123456
sum=0
while true
do
read -p "请输入密码:" PASS
let sum++
if [ $PASS = $password ];then
echo "输入密码成功!"
break
elif [ $sum -lt $n ];then
echo "输入密码失败,请重新输入:"
continue
else
echo "三次输入错误!警告!!"
break
fi
done
13、编写能够自动生成一个8位随机密码的脚本
#!/bin/bash
x="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
pass="" #初始值为空
for i in {1..8}
do
n=$[RANDOM % 62] #取值范围是0-61
y=${x:n:1} #取随机一个数字
pass=${pass}$y
done
echo $pass
14、写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/bin/bash
sum=0
for ((i=1; ;i++))
do
sum=$sum
echo "可购买的商品为衣服(500元),裤子(400元),鞋子(350元),帽子(150元),袜子(50元)"
echo "请输入相应的编号购买产品"
echo "1:衣服 2:裤子 3:鞋子 4:帽子 5:袜子 "
read -p "相应编号:" goods
case $goods in
1)
read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
if [ $a -eq 1 ];then
sum=$[$sum+500]
read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
if [ "$aa" -eq 0 ];then
echo "你本次购买了$i 件商品,一共$sum 元。"
break
fi
fi
;;
2)
read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
if [ $a -eq 1 ];then
sum=$[$sum+400]
read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
if [ "$aa" -eq 0 ];then
echo "你本次购买了$i 件商品,一共$sum 元。"
break
fi
fi
;;
3)
read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
if [ $a -eq 1 ];then
sum=$[$sum+350]
read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
if [ "$aa" -eq 0 ];then
echo "你本次购买了$i 件商品,一共$sum 元。"
break
fi
fi
;;
4)
read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
if [ $a -eq 1 ];then
sum=$[$sum+150]
read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
if [ "$aa" -eq 0 ];then
echo "你本次购买了$i 件商品,一共$sum 元。"
break
fi
fi
;;
5)
read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
if [ $a -eq 1 ];then
sum=$[$sum+50]
read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
if [ "$aa" -eq 0 ];then
echo "你本次购买了$i 件商品,一共$sum 元。"
break
fi
fi
;;
*)
echo "请输入正确的商品编号"
esac
done
以上是关于Shell脚本练习一部曲的主要内容,如果未能解决你的问题,请参考以下文章