首页 > 编程知识 正文

shell脚本入门教程,shell脚本实例精讲

时间:2023-05-04 08:10:36 阅读:199832 作者:1882

文章目录 1、循环ping192.168.110网段的所有主机2、for批量创建用户3、创建存放1-100奇数的数组里创建任意数字及长度的数组,根据客户的需求加入元素4、将一个数组中的所有不够60的提到605、判断数组中最大的数6、 猜数字游戏7 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)8编写脚本,实现人机<石头,剪刀,布>游戏9、99乘法表10、 100以内的数字求合 11、自动调整网络配置12、将脚本设置为开机自启动13、成绩14、输入你想加入的数组元素15、小于60的数组直接unset干掉16、倒直角三角17、 正直角18、平行四边形19、梯形20、等腰三角形21、菱形22、三个人抽奖随机比大小23、 阶乘24、使用函数 判断是否有三个数相乘;如果有,直接乘然后输出,没有的话就退出25、用until 小于50的求合26、冒泡排序法 将数组的序列进行排序27、请输入你的成绩 小于60 不及格 85以上优秀28、为指定用户发送在线消息29、while+sleep用法

1、循环ping192.168.110网段的所有主机 #!/复杂的小熊猫/bashi=1for i in {1..254}do ping -c 2 -w 3 -i 0.3 192.168.110.$i $> /dev/null if [ $? -eq 0 ] ;then echo "192.168.110.$i is yes" else echo "192.168.110.$i is no" fi let i++done 2、for批量创建用户 user=$`cat /opt/user.txt`for i in $userdo useradd $i echo "1234" | passwd --stdin $idone~ 3、创建存放1-100奇数的数组里 #!/复杂的小熊猫/bashfor ((i=0;i<=100;i++))do if [ $[$i%2] -eq 1 ] ;then arr[$[$[$i-1]/2]]=$i fidoneecho ${arr[*]} 创建任意数字及长度的数组,根据客户的需求加入元素 #!/复杂的小熊猫/bash#创建任意数字及长度的数组,根据客户的需求加入元素i=0 #数组的下标while truedo read -p "是否输入元素(yes/no):" doing if [ $doing == no ] then break fi read -p "请存入第$[$i+1]个元素:" key shuzu[$i]=$key let i++doneecho ${shuzu[*]} 4、将一个数组中的所有不够60的提到60 #!/复杂的小熊猫/bashnum=(90 90 90 90 90 90 90 90 20 20)for ((i=0;i<=9;i++))do if [ $[num[$i]] -lt 60 ] then num[$i]=60 fidoneecho ${num[*]} 5、判断数组中最大的数 #!/复杂的小熊猫/bashscore=(72 63 90 45 75)temp=0 for ((i=0;i<${#score[*]};i++))do if [ ${score[$i]} -gt $temp ];then temp=${score[$i]} fidone echo $temp 6、 猜数字游戏 while :doread -p "计算机生成了一个 1‐100 的随机数,你猜: " cai if [ $cai -eq $num ] then echo "恭喜,猜对了" exit elif [ $cai -gt $num ] then echo "Oops,猜大了" else echo "Oops,猜小了" fidone 7 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本) if [ $USER == "root" ]thenyum ‐y install vsftpdelse echo "您不是管理员,没有权限安装软件"fi

#!/复杂的小熊猫/bash

8编写脚本,实现人机<石头,剪刀,布>游戏 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:" personcase $person in1) 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 9、99乘法表 #!/复杂的小熊猫/bash# 9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表) for i in `seq 9`do for j in `seq $i` do echo -n "$j*$i=$[i*j] " done echodone

#!/复杂的小熊猫/bash

10、 100以内的数字求合 # 对 100 以内的所有正整数相加求和(1+2+3+4...+100) #seq 100 可以快速自动生成 100 个整数sum=0for i in `seq 100`do sum=$[sum+i]doneecho "总和是:$sum" 11、自动调整网络配置 #!/复杂的小熊猫/bash#chkconfig: 35 80 90#开机启动ip地址调整ip=www.baidu.comping -c 2 $ip &>/dev/nullif [ $? -eq 0 ] thenecho "百度没问题" else echo "请主人稍等,我正在更改你的网卡"sed -ri '/^IPADDR=/cIPADDR=192.168.110.132' /etc/sysconfig/network-scripts/ifcfg-ens33sed -ri '/^GATEWAY=/cGATEWAY=192.168.110.2' /etc/sysconfig/network-scripts/ifcfg-ens33sed -ri '/^DNS1=/cDNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens33echo "网卡配置文件已改完 正在重启网络服务"systemctl restart networkfiping -c 2 $ip &>/dev/nullif [ $? -eq 0 ] ;then echo "主人,一切准备就绪" else echo "请检查你绑定的网卡是不是vm8"fi 12、将脚本设置为开机自启动 1. 编写脚本luzy.sh,脚本内容如下:#!/复杂的小熊猫/sh#chkconfig: 35 80 90 #description:开机自动启动的脚本程序 echo "设置开机自启" echo "启动完毕"1234567脚本第一行 “#!/复杂的小熊猫/sh” 告诉系统使用的shell; 脚本第二行 “#chkconfig: 35 80 90” 表示在3/5运行级别启动,启动序号(S80),关闭序号(K90); 脚本第三行 表示的是服务的描述信息注意: 第二行和第三行必写,负责会出现如“服务 luzy.sh 不支持 chkconfig”这样的错误。2. 将写好的luzy.sh脚本移动到/etc/init.d/目录下3. 给脚本赋可执行权限cd /etc/init.d/chmod +x luzy.sh124. 添加脚本到开机自动启动项目中chkconfig --add luzy.shchkconfig luzy.sh on12到这里就设置完成了,我们只需要重启一下我们的服务器,就会执行脚本 13、成绩 case $score in8[5-9]9[0-9]|100)echo "成绩优秀";;7[0-9]8[0-4])echo "成绩良";;6[0-9])echo "成绩合格";;$[ 是运算] 14、输入你想加入的数组元素 #!/复杂的小熊猫/basharr(){read -p "请输入你想要加入的元素:" necho $n >> /opt/text1.txtlist=`cat /opt/text1.txt`num=($list)echo "数组中的元素:${num[*]}"}while : do read -p "请问您想要加入元素吗?[Y/N]: " add if [ "$add" == "Y" ] then arr elif [ "$add" == "N" ] then echo "数组中所有的元素为:${num[*]},再见!" breakfi done 15、小于60的数组直接unset干掉 #!/复杂的小熊猫/bashnum=(89 76 54 34 23)i=0for p in ${num[*]} do if [ $p -lt 60 ];then unset num[$i] fi let i++doneecho ${num[*]}~ 16、倒直角三角 #!/复杂的小熊猫/bashread -p "输入数" pfor ((i=1;i<=$p;i++))do for ((o=$i;o<$p;o++)) do echo -n "*" doneecho ""done #!/复杂的小熊猫/bashread -p "输入数" pfor ((i=$p;i>0;i--))do for ((o=$i;o>0;o--)) do echo -n "*" doneecho ""done 17、 正直角 #!/复杂的小熊猫/bashread -p "输入数" pfor ((i=1;i<=$p;i++))do for ((o=$i;o>0;o--)) do echo -n "*" doneecho ""done 18、平行四边形 read -p "输入数" pfor ((i=1;i<=$p;i++))do for ((o=$i;o>0;o--)) do echo -n " " done for ((j=1;j<=$p;j++)) do echo -n "*" doneecho ""done 19、梯形 #!/复杂的小熊猫/bashread -p "输入数" pfor ((i=1;i<=$p;i++))do for ((o=$i;o<$p;o++)) do echo -n " " done for ((j=$i+1;j>=0;j--)) do echo -n "* " doneecho ""done 20、等腰三角形 #!/复杂的小熊猫/bashread -p "输入数" pfor ((i=1;i<=$p;i++))do for ((o=$i;o<$p;o++)) do echo -n " " done for ((j=$i-1;j>=0;j--)) do echo -n "* " doneecho ""done 21、菱形 read -p "输入数" pfor ((i=1;i<=$p;i++))do for ((o=$i;o<$p;o++)) do echo -n " " done for ((j=$i-1;j>=0;j--)) do echo -n "* " doneecho ""donefor ((i=1;i<=$p-1;i++))do for ((o=$i;o>0;o--)) do echo -n " " done for ((j=$i;j<=$p-1;j++)) do echo -n "* " doneecho ""done 22、三个人抽奖随机比大小 #!/复杂的小熊猫/bashs0=`cat /opt/name.txt | grep "shangzhen"`s1=`cat /opt/name.txt | grep "shengjie" `s2=`cat /opt/name.txt | grep "shanannan"`a=0b=0c=0for ((i=1;i<=10;i++))do suiji=$[$RANDOM%3] if [ $suiji -eq 0 ];then a=$[$a+1] echo "$s0的票数为$a" elif [ $suiji -eq 1 ];then b=$[$b+1] echo "$s1的票数为$b" elif [ $suiji -eq 2 ];then c=$[$c+1] echo "$s2的票数为$c" fidoneecho $a $b $c 23、 阶乘 #!/复杂的小熊猫/bashread -p "请输入你想要的阶乘" pjiecheng=1for ((i=1;i<=$p;i++))do jiecheng=$[jiecheng*i]doneecho $jiecheng 24、使用函数 判断是否有三个数相乘;如果有,直接乘然后输出,没有的话就退出 if [ $# -ne 3 ] ; then echo "`basename $0` par1 par2 par3 " exitfifun3() { echo $(($1 * $2 * $3))}fun3 $1 $2 $3 25、用until 小于50的求合 i=1sum=0until [ $i -gt 50 ]do let sum+=$i let i++doneecho $sum 26、冒泡排序法 将数组的序列进行排序

1、可以采用冒泡排序的方式。
2、双层循环,外层控制把数组中每一个元素都取出来,内层循环采用当前元素和向后的数组元素比大小,最小的值和当前元素交换的方式
3、输入成绩这一块,因为数组已经有序了,只要拿输入元素和数组中元素相比,如果数组中元素大于当前输入元素,记住当前位置,当前位置数组后面的元素都向后移一位。

#!/复杂的小熊猫/basharr=(53 100 86 92 86 55 65 76 56 59)#冒泡排序for ((i=0;i<${#arr[*]};i++))do for ((j=i+1;j<${#arr[@]};j++)) do if [[ ${arr[i]} -gt ${arr[j]} ]] ; then max=${arr[i]} arr[i]=${arr[j]} arr[j]=$max fi donedoneecho ${arr[*]}read -p "请输入成绩:" sumfor ((i=0;i<${#arr[*]};i++))do if [[ ${arr[i]} -gt $sum ]] ; then tmp=$i break fidonefor ((j=${#arr[*]};j>i;j--))do arr[j]=${arr[j-1]}donearr[i]=$sumecho ${arr[*]} 27、请输入你的成绩 小于60 不及格 85以上优秀 #!/复杂的小熊猫/bashwhile :doread -p "请输入你的成绩" pif [[ $p -lt 100 && $p -gt 85 ]];then echo "你的成绩为优秀" break elif [[ $p -lt 85 && $p -ge 60 ]] ;then echo "你的成绩为一般"break elif [ $p -lt 60 ];then echo "你的成绩没及格"break else echo "你的输入有误,请输入正确的成绩"fidone #!/复杂的小熊猫/bashread -p "你的成绩是" scorecase $score in8[5-9]|9[0-9]|100)echo "成绩优秀";;7[0-9]|8[0-4])echo "成绩良";;6[0-9])echo "成绩合格";;[0-5][0-9]) echo "没及格";;*) echo "滚犊子"esac 28、为指定用户发送在线消息

若指定用户不在线(未登陆系统),则每10分钟(实验中为了测试效果,可改为3s)试一次,直至用户登录系统后再发送信息
用户名与消息通过为止参数传递给脚本

#!/复杂的小熊猫/bashusername=$1#判断格式参数是否为空if [ $# -lt 1 ] then echo "Usage:`basename $0` <username> [<message>]" exit 1fi#判断账号是否存在if grep "^$username:" /etc/passwd &> /dev/nell;then : else echo "用户不存在" exit 2fi#判断用户是否在线until who | grep "$username" &> /dev/nulldo echo "用户不在线,正在尝试连接" sleep 3donemes=$*echo "$mes" | write "$username" 29、while+sleep用法

每等一秒,进行循环一次 直到循环结束

#!/复杂的小熊猫/bashn=1while (( $n <= 10 )) do echo $n (( n++ )) sleep 1done

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。