shell脚本快速入门之—–shell脚本练习100例!!!

shell脚本快速入门之—–shell脚本练习100例!!!#!/bin/bashi=1foriin{1..254}doping-c2-w3-i0.3192.168.110.$i$>/dev/nullif[$?-eq0];thenecho”192.168.110.$iisyes”elseecho”192.168.110.$iisno”fileti++done

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、循环ping192.168.110网段的所有主机

#!/bin/bash
i=1
for 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 $user
do
   useradd $i
   echo "1234" | passwd --stdin $i

done
~    

3、创建存放1-100奇数的数组里

#!/bin/bash
for ((i=0;i<=100;i++))
do
  if [ $[$i%2] -eq 1  ] ;then
   arr[$[$[$i-1]/2]]=$i
  fi



done
echo ${ 
   arr[*]}

创建任意数字及长度的数组,根据客户的需求加入元素

#!/bin/bash
#创建任意数字及长度的数组,根据客户的需求加入元素
i=0  #数组的下标
while true
do
   read -p "是否输入元素(yes/no):" doing
   if [ $doing == no ]
   then
      break
   fi
   read -p "请存入第$[$i+1]个元素:" key
   shuzu[$i]=$key
   let i++
done
echo ${ 
   shuzu[*]}

4、将一个数组中的所有不够60的提到60

#!/bin/bash
num=(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
  fi
done
echo ${ 
   num[*]}

5、判断数组中最大的数

#!/bin/bash
score=(72 63 90 45 75)
temp=0
 for ((i=0;i<${ 
   #score[*]};i++))
do
  if [ ${score[$i]} -gt $temp ];then
  temp=${ 
   score[$i]}
  fi
done
 echo $temp

6、 猜数字游戏

 while  :
do
	read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
    if [ $cai -eq $num ]
    then
       	echo "恭喜,猜对了"
       	exit
    	elif [ $cai -gt $num ]
    	then
           	echo "Oops,猜大了"
      	else
           	echo "Oops,猜小了"
 	fi
done

7 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)

if [ $USER == "root" ]
then
	yum ‐y install vsftpd
else
    echo "您不是管理员,没有权限安装软件"
fi

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

9、99乘法表

#!/bin/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
    echo
done

#!/bin/bash

10、 100以内的数字求合

#  100 以内的所有正整数相加求和(1+2+3+4...+100)
 
#seq 100 可以快速自动生成 100 个整数
sum=0
for i in `seq 100`
do
  	sum=$[sum+i]
done
echo "总和是:$sum"

11、自动调整网络配置

#!/bin/bash
#chkconfig: 35 80 90
#开机启动ip地址调整
ip=www.baidu.com
ping -c 2 $ip &>/dev/null
if  [ $? -eq 0 ]
 then
echo "百度没问题"
 else
 echo "请主人稍等,我正在更改你的网卡"
sed -ri '/^IPADDR=/cIPADDR=192.168.110.132' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -ri '/^GATEWAY=/cGATEWAY=192.168.110.2' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -ri '/^DNS1=/cDNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens33
echo "网卡配置文件已改完 正在重启网络服务"
systemctl restart network
fi

ping -c 2 $ip &>/dev/null
if [ $? -eq 0 ] ;then
 echo "主人,一切准备就绪"
 else
  echo "请检查你绑定的网卡是不是vm8"
fi

12、将脚本设置为开机自启动

1. 编写脚本luzy.sh,脚本内容如下:

#!/bin/sh
#chkconfig: 35 80 90      
#description:开机自动启动的脚本程序
 
echo "设置开机自启"
 
echo "启动完毕"
1
2
3
4
5
6
7
脚本第一行 #!/bin/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.sh
1
2
4. 添加脚本到开机自动启动项目中

chkconfig --add luzy.sh
chkconfig luzy.sh on
1
2
到这里就设置完成了,我们只需要重启一下我们的服务器,就会执行脚本

13、成绩

case $score in
8[5-9]9[0-9]|100)
echo "成绩优秀"
;;

7[0-9]8[0-4])
echo "成绩良"
;;

6[0-9])
echo "成绩合格"
;;

$[ 是运算]

14、输入你想加入的数组元素

#!/bin/bash
arr(){ 
   
read -p "请输入你想要加入的元素:" n
echo $n >> /opt/text1.txt
list=`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[*]},再见!"
    break
fi


 done

15、小于60的数组直接unset干掉

#!/bin/bash
num=(89 76 54 34 23)
i=0
for p in ${num[*]}
 do
 if [ $p -lt 60 ];then
   unset num[$i]
 fi
  let i++
done
echo ${num[*]}
~                

16、倒直角三角

#!/bin/bash
read -p "输入数" p
for ((i=1;i<=$p;i++))
do
  for ((o=$i;o<$p;o++))
  do
  echo -n "*"
  done
echo ""
done
#!/bin/bash
read -p "输入数" p
for ((i=$p;i>0;i--))
do
  for ((o=$i;o>0;o--))
  do
  echo -n "*"
  done
echo ""
done

17、 正直角

#!/bin/bash
read -p "输入数" p
for ((i=1;i<=$p;i++))
do
  for ((o=$i;o>0;o--))
  do
  echo -n "*"
  done
echo ""
done

18、平行四边形

read -p "输入数" p
for ((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 "*"
 done
echo ""
done

19、梯形

 #!/bin/bash
read -p "输入数" p
for ((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 "* "
 done
echo ""
done

20、等腰三角形

#!/bin/bash
read -p "输入数" p
for ((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 "* "
 done
echo ""
done

21、菱形

read -p "输入数" p
for ((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 "* "
 done
echo ""
done


for ((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 "* "
 done
echo ""
done

22、三个人抽奖随机比大小

#!/bin/bash
s0=`cat /opt/name.txt | grep "shangzhen"`
s1=`cat /opt/name.txt | grep "shengjie" `
s2=`cat /opt/name.txt | grep "shanannan"`
a=0
b=0
c=0
for ((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"
   fi
done
echo $a $b $c 

23、 阶乘

#!/bin/bash
read -p "请输入你想要的阶乘" p
jiecheng=1
for ((i=1;i<=$p;i++))
do
  jiecheng=$[jiecheng*i]
done
echo $jiecheng

24、使用函数 判断是否有三个数相乘;如果有,直接乘然后输出,没有的话就退出

if [ $# -ne 3 ] ; then
        echo "`basename $0` par1 par2 par3 "
   exit
fi
fun3() { 
   
        echo $(($1 * $2 * $3))
}
fun3 $1 $2 $3

25、用until 小于50的求合

i=1
sum=0
until [ $i -gt 50 ]
do
  let sum+=$i
  let i++
done
echo $sum

26、冒泡排序法 将数组的序列进行排序

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

#!/bin/bash
arr=(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
  done
done
echo ${ 
   arr[*]}

read -p "请输入成绩:" sum
for ((i=0;i<${ 
   #arr[*]};i++))
do
  if [[ ${arr[i]} -gt $sum ]] ; then
    tmp=$i
    break
  fi
done
for ((j=${ 
   #arr[*]};j>i;j--))
do
   arr[j]=${ 
   arr[j-1]}
done
arr[i]=$sum
echo ${ 
   arr[*]}

27、请输入你的成绩 小于60 不及格 85以上优秀

#!/bin/bash
while :
do
read -p "请输入你的成绩"  p
if [[ $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  "你的输入有误,请输入正确的成绩"
fi
done
#!/bin/bash
read -p "你的成绩是" score
case $score in
8[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)试一次,直至用户登录系统后再发送信息
用户名与消息通过为止参数传递给脚本

#!/bin/bash
username=$1
#判断格式参数是否为空
if [ $# -lt 1 ]
 then
 echo "Usage:`basename $0` <username> [<message>]"
 exit 1
fi
#判断账号是否存在
if grep "^$username:" /etc/passwd &> /dev/nell;then :
  else
        echo "用户不存在"
        exit 2
fi
#判断用户是否在线
until who | grep "$username" &> /dev/null
do
        echo "用户不在线,正在尝试连接"
        sleep 3
done
mes=$*
echo "$mes" | write "$username"

29、while+sleep用法

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

#!/bin/bash
n=1
while (( $n <= 10 )) 
do
  echo $n 
  (( n++ ))
  sleep 1

done
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186250.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ebpf_ebpf需要修改内核吗

    ebpf_ebpf需要修改内核吗eBPF简史BPFBPF的全称是BerkeleyPacketFilter,顾名思义,这是一个用于过滤(filter)网络报文(packet)的架构。过滤(Filter):根据外界输入的规则过滤报文;复制(Copy):将符合条件的报文由内核空间复制到用户空间;?packet报文buffer百度百科在计算机领域,缓冲器指的是缓冲寄存器,它分输入缓冲器和输出缓冲器两种。前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;后者的作用是用来暂时存放处理器送往外设的数据。有了数控缓冲器,

    2022年9月21日
    0
  • cmd ping命令大全_ping命令怎么使用

    cmd ping命令大全_ping命令怎么使用简介:ping是一种Computernetworktools(电脑网络工具),作用是测试数据包是否能通过IP协议到达特定主机。Ping是Windows系统、Unix系统和Linux系统下的一个命令。它也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。该命令还可以加许多参数使用。例如:-t,-l,-n。(注意,所有ping指令都必须在知道IP的情况下使用)使用方法:主要的用法:1.-t:不断向目标IP发送数.

    2022年9月22日
    0
  • 【转载】数据库软件架构设计些什么

    【转载】数据库软件架构设计些什么

    2021年11月20日
    35
  • winrar去广告的方法_mt管理器去广告教程

    winrar去广告的方法_mt管理器去广告教程一、前言1.1Winrar解压缩工具市场上有很多优秀的压缩工具,常用的有Winrar和360压缩工具。Winrar是免费压缩工具,特色是每次使用都会弹出广告。影响用户体验和工作效率,当然最

    2022年8月2日
    11
  • GIT、GITLAB、GITHUB、GITLIB[通俗易懂]

    GIT、GITLAB、GITHUB、GITLIB[通俗易懂]Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Github-一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越多的应用程序转移到了云上

    2025年5月31日
    0
  • linux系统中如何卸载删除软件_卸载预装软件app

    linux系统中如何卸载删除软件_卸载预装软件appLinux下如何卸载软件比如我在Linux下安装了Mysql,但是现在我要卸载重装,提示卸载失败,有其它的服务或软件如php-mysql-5.1.6-3;mysql-server-5.0.22-2.1依赖于Mysql。我可以加–nopeds来卸载Mysql,但是依赖于Mysql的软件或服务是不是也要卸载?我把Mysql卸载了,现在安装了RPM包的mysql-server和Mysql-client…

    2022年9月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号