脚本从简到深训练

代码 代码 1201 人阅读 | 0 人回复

<
题要:本文取该链接分离初教者合用:https://blog.csdn.net/kali_yao/article/details/119970869?spm=1001.2014.3001.5502
前期会没有连续的写进剧本,记的存眷哦

1.拆建yum
  1. #!/bin/bash
  2. #布置yum堆栈
  3. mount /dev/cdrom /mydvd
  4. rm -rf /etc/yum.repos.d/*.repo
  5. echo "[abc]    //那里因为喊出的内乱容是有换止以是要用引号
  6. name=xxx
  7. baseurl=file:///mydvd
  8. enabled=1
  9. gpgcheck=0" > /etc/yum.repos.d/abc.repo //最初利用重定背保留到yum设置文件中
复造代码
2.装置apache效劳
  1. #!/bin/bash
  2. yum -y install httpd   //拆包
  3. echo "web-test~~~" > /var/www/html/index.html   //界说主页内乱容
  4. systemctl restart httpd    //开效劳
  5. systemctl enable httpd    //设置开机自启
复造代码
3.装置ftp效劳
  1. yum -y install vsftpd &> /dev/null   //装置ftp,没有显现任何疑息
  2. systemctl restart vsftpd
  3. systemctl enable vsftpd
复造代码
  dev下的null相称于乌洞,没有需求的疑息皆能够扔到里面让其消逝。
 4.创立用户及暗码
  1. #!/bin/bash
  2. useradd $1   //利用地位变量$1,正在施行剧本时灵敏界说用户名
  3. echo "$2" | passwd --stdin $1   //利用地位变量$2界说暗码
复造代码
5.利用read指令,以交互式利用剧本 
  1. #!/bin/bash
  2. read  -p  "请输进用户称号:"  n   //利用变量n存储用户敲的名字  (-p便是您要输进甚么交互式的指令)
  3. useradd $n
  4. read  -p  "请输进暗码:"  m      //利用变量m存储用户敲的暗码
  5. echo "$m" | passwd --stdin $n
复造代码
6.再次改进剧本
  1. #!/bin/bash
  2. read -p "请输进用户称号:" n
  3. useradd $n
  4. stty -echo
  5. read -p "请输进暗码:" m
  6. echo
  7. stty echo
  8. echo "$m" | passwd --stdin $n
复造代码
7.前提测试及逻辑标记
  1. #!/bin/bash
  2. [ $USER == root ] ||  exit   //假如用户没有是办理员便退出
  3. [ $USER != root ] &&  exit   //结果同上,另外一种写法
  4. yum -y install vsftpd
  5. systemctl restart vsftpd
  6. systemctl enable vsftpd
复造代码
8.创立用户(read交互式前提测试及逻辑符使用)
  1. #!/bin/bash
  2. read -p "请输进用户称号:" n
  3. [ -z $n ] && echo "您却是给个名字阿!" && exit   //判定用户名为空的话便退出剧本
  4. useradd $n
  5. stty -echo
  6. read -p "请输进暗码:" m
  7. echo
  8. stty echo
  9. echo "$m" | passwd --stdin $n
复造代码
9.编写剧本,每2分钟查抄效劳器登录账户数目,假如超越3人 收邮件告诉办理员
  1. vim test01.sh
  2. #!/bin/bash
  3. n=$(who | wc -l)    //n内里存储了登录数目
  4. [ $n -gt 3 ] && echo "效劳器被进侵!能够牛教师去了!"  | mail -s test root
  5. //用n战3比照,假如超越3便收邮件
  6. chmod  +x  test01.sh   //剧本写完后,付与x权限
  7. crontab -e      //编写方案使命
  8. */2  *  *  *  *  /opt/test01.sh    //每2分钟施行剧本,然后保留退出
  9. 只需今朝超越3人登录体系,那末每隔2分钟便会支到邮件,利用mail号令
  10. 检察邮件
复造代码
10.if测试收集联通性
  1. #!/bin/bash
  2. ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
  3. if [ $? -eq 0 ];then
  4.     echo "通了!"
  5. else
  6.     echo "欠亨!"
  7. fi
复造代码
11.if多分收测试输进成就测试
  1. #!/bin/bash
  2. read -p "期终测验成就怎样?"  n
  3. if [ $n -ge 90 ];then
  4.     echo "优良!"
  5. elif [ $n -ge 80 ];then
  6.     echo "优良!"
  7. elif [ $n -ge 60 ];then
  8.     echo "合格!"
  9. else
  10.     echo "早晨出饭了!"
  11. fi
复造代码
12.for轮回ping收集
  1. #!/bin/bash
  2. x=0
  3. y=0
  4. for i in {1..15}
  5. do
  6.     ping -c 3 -i 0.2 -W 1 192.168.4.$i &> /dev/null
  7.     if [ $? -eq 0 ];then
  8.         echo "4.$i 通了!"
  9.                 let x++
  10.     else
  11.         echo "4.$i 欠亨!"
  12.                 let y++
  13.     fi
  14. done
  15. echo "$x台通了,$y台欠亨"
复造代码
13.猜数剧本
  1. #!/bin/bash
  2. x=$[RANDOM%100]    //RANDOM是能够获得随机数的变量,除以100与余数能够获得整到99之间的随机数,而且存到变量x中
  3. y=0     //那里借能够界说猜的次数,一次出猜时是0次
  4. while :     //有限轮回
  5. do
  6. let y++    //每猜一次,把y+1
  7. read -p "请输进一个整数(0-99):" n        //将用户给的数字存到变量n中
  8. if [ $n -eq$x ];then      //利用if多分枝减前提测试判定n能否即是x
  9.         echo "祝贺!猜对了!猜了$y次"     //假如n即是x便喊出那句话
  10.         exit
  11. elif [ $n -gt $x ];then                           //假如n比x年夜
  12.         echo "猜年夜了!"
  13. else                                                          //另有最初一种状况
  14.         echo "猜小了!"
  15. fi
  16. done
复造代码
14.case掌握简朴的nginx效劳
  1.设置nginx效劳,nginx取httpd一样也是网站效劳,但装置战利用方法有所差别
  1. cp lnmp_soft/nginx-1.17.6.tar.gz  /opt   //拷贝nginx到opt下
  2. cd  /opt
  3. vim  test03.sh
  4. #!/bin/bash
  5. yum -y install gcc make pcre-devel openssl-devel  //装置依靠
  6. tar -xf nginx-1.17.6.tar.gz   //开释nginx的tar包
  7. cd nginx-1.17.6   //进进nginx目次
  8. ./configure   //设置
  9. make   //编译
  10. make install    //装置
复造代码
ls  /usr/local/nginx     //剧本施行终了后检察
systemctl stop httpd  //封闭之前网站效劳
/usr/local/nginx/sbin/nginx   //开启nginx
systemctl stop firewalld   //封闭防水墙
  
  2.利用case分收编写剧本,用去掌握nginx效劳
  1. #!/bin/bash
  2. case $1 in    //利用施行剧本后的第1个地位变量做为婚配工具
  3. start|kai|k)  //假如$1是start|kai|k中的随便一个便施行上面号令
  4.     /usr/local/nginx/sbin/nginx;;    //开效劳
  5. stop|guan)  //假如$1是stop|guan中的随便一个便施行上面号令
  6.     /usr/local/nginx/sbin/nginx -s stop;;   //闭效劳
  7. restart|cq)   //假如$1是restart|cq中的随便一个便施行上面号令
  8.     /usr/local/nginx/sbin/nginx -s stop     //先封闭
  9. /usr/local/nginx/sbin/nginx;;     //再开启,相称于重启效劳
  10. cha|status)
  11.     netstat -ntulp | grep -q nginx
  12.     [ $? -eq 0 ] && echo "nginx正正在运转。。。"  || echo "nginx已开启。。。";;
  13. *)
  14.     echo "请输进start|stop|restart"
  15. esac
复造代码
15.再次将之前剧本改进,参与能够定义色彩的函数,然后下圆挪用 而且参与判定结果,假如效劳曾经开启没有会报错
  1. #!/bin/bash
  2. c(){       //界说函数名字叫c,能够用去输出差别色彩的内乱容
  3. echo -e "\033[$1m$2\033[0m"
  4. }
  5. case $1 in
  6. start|kai|k)
  7.     netstat -ntulp | grep -q nginx    //检测nginx能否开启
  8.     [ $? -eq 0 ] && c 32 "nginx已开启" && exit   //假如开启便喊出提醒并推出
  9.     /usr/local/nginx/sbin/nginx;;   //假如出开启便一般施行开启使命
  10. stop|guan)
  11.     /usr/local/nginx/sbin/nginx -s stop;;
  12. restart|cq)
  13.     /usr/local/nginx/sbin/nginx -s stop
  14.     /usr/local/nginx/sbin/nginx;;
  15. cha|status)
  16.     netstat -ntulp | grep -q nginx
  17.     [ $? -eq 0 ] && c 32 "nginx正正在运转。。。"  || c 31 "nginx已开启。。。";;
  18. *)
  19.     echo "请输进start|stop|restart"
  20. esac                               
复造代码
16.echo一个好玩的剧本
  1. #!/bin/bash
  2. for i in {1..20};
  3. do
  4.      for j in {1..50};
  5.      do
  6.           color=$[RANDOM%7+31]
  7.           echo -e "\033[1;${color};5m*\033[0m\c"
  8.      done
  9.      echo
  10. done
复造代码
17.编写剧本,完成批量修正文件扩大名
  1. #!/bin/bash
  2. #批量修正扩大名
  3. for i in $(ls *.txt)   //找到一切的txt文件交给for轮回
  4. do
  5.     a=${i%.*}   //用来尾的办法删除扩大名
  6.     mv $i $a.doc   //再将源文件修正为doc的
  7. done
复造代码
  1. #!/bin/bash
  2. #批量修正扩大名
  3. for i in $(ls *.$1)     //要改啥范例的文件用$1地位变量暗示
  4. do
  5.     a=${i%.*}
  6.     mv $i $a.$2   //要改成啥,用$2暗示
  7. done
复造代码
18.倒计时剧本
  1. #!/bin/bash
  2. #功用形貌(Description):经由过程tput定位光标,正在屏幕特定地位挨印当前的计较机工夫.
  3. #利用Ctrl+C中止剧本时显现光标.
  4. trap &#39;tput cnorm;exit&#39; INT EXIT
  5. #界说数组变量,该数字有9个元素,每止是1个元素,每个数字占用12列.
  6. #0的数组坐标地位为0-11,1的数组坐标地位为12-23,依此类推.
  7. number=(
  8. &#39;  0000000000      111     2222222222  3333333333 44    44     5555555555  6666666666   777777777   888888888  9999999999 &#39;
  9. &#39;  00      00    11111             22          33 44    44     55          66           77     77   88     88  99      99 &#39;
  10. &#39;  00      00   111111             22          33 44    44     55          66           77     77   88     88  99      99 &#39;
  11. &#39;  00      00       11             22          33 44    44     55          66                  77   88     88  99      99 &#39;
  12. &#39;  00      00       11     2222222222  3333333333 44444444444  5555555555  6666666666          77   888888888  9999999999 &#39;
  13. &#39;  00      00       11     22                  33       44             55  66      66          77   88     88          99 &#39;
  14. &#39;  00      00       11     22                  33       44             55  66      66          77   88     88          99 &#39;
  15. &#39;  00      00       11     22                  33       44             55  66      66          77   88     88          99 &#39;
  16. &#39;  0000000000  1111111111  2222222222  3333333333       44      555555555  6666666666          77   888888888  9999999999 &#39;
  17. )
  18. #获得计较机工夫,并别离提与个位战十位数字.
  19. get_time(){
  20.    if [ -z "$1" ];then
  21.        echo "Usage:$0 倒计时分钟"
  22.        exit
  23.    fi
  24.    sec=$[$1*60]
  25. }
  26. #将数组中的某个数组挨印出去.
  27. print_time(){
  28.     #从第几个地位开端提与数组元素,0便从0开端,1便从12开端,2便从24开端,依此类推.
  29.     begin=$[$1*12]
  30.     for i in `seq 0 ${#number[@]}`   #0-9的轮回.
  31.     do
  32.         tput cup $[i+5] $2
  33.         echo -en "\033[91m${number[i]:$begin:12}\033[0m"
  34.     done
  35. }
  36. #顺次挨印小时,分钟,秒(个位战十位别离挨印).
  37. get_time $1
  38. while :
  39. do
  40.   [ $sec -lt 0 ] && exit
  41.    tput civis    #躲藏光标.
  42.    tput clear
  43.    tput cup 3 16
  44.    echo  "倒计时:"
  45.    for j in `seq ${#sec}`
  46.    do
  47.         num=`echo $sec | cut -c $j`
  48.         y=$[j*16]
  49.         print_time $num $y
  50.    done
  51.    let sec--
  52.    echo
  53.    sleep 1
  54. done
  55.                      
复造代码
19.国际象棋布景
  1. #!/bin/bash
  2. color1=&#39;\033[46m    \033[0m&#39;
  3. color2=&#39;\033[47m    \033[0m&#39;
  4. for i in {1..8};do
  5.     for k in {1..2};do
  6.         if [ $[i%2] -eq 0 ];then
  7.               for j in {1..4};do
  8.                    echo -en "$color1$color2"
  9.               done
  10.         else
  11.               for j in {1..4};do
  12.                     echo -en "$color2$color1"
  13.                done
  14.         fi
  15.        echo
  16.     done
  17. done  
复造代码
20.
  1. #!/bin/bash
  2. read -p "请输进n值:" num
  3. i=0
  4. while [ $i -le $num ];do
  5.         if [ $i -eq 0 ];then
  6.            num1=0
  7.            echo $num1
  8.         elif [ $i -eq 1 ];then
  9.            num2=1
  10.            echo $num2
  11.         else
  12.            tmp=$num2
  13.            let num2+=num1
  14.            num1=$tmp
  15.            echo $num2
  16.         fi
  17.         let i++
  18. done
复造代码
21.能够检察各类效劳器的疑息
  1. #!/bin/bash
  2. while :
  3. do
  4. clear     //浑屏
  5. ifconfig eth0  | awk &#39;/RX p/{print "效劳器eth0网卡的领受流量是"$5"字节"}&#39;
  6. ifconfig eth0  | awk &#39;/TX p/{print "效劳器eth0网卡的收收流量是"$5"字节"}&#39;
  7. df -h | awk &#39;/\/$/{print "根分区盈余容量是"$4}&#39;
  8. awk &#39;END{print "效劳器账户总数是"NR"个"}&#39; /etc/passwd
  9. echo "当前已登岸账户数目是$(who | wc -l)个"
  10. free -h | awk &#39;/^Mem:/{print "效劳器内乱存盈余容量是"$4}&#39;
  11. uptime | awk &#39;{print "cpu的15分钟均匀背载是"$NF}&#39;
  12. echo "效劳器装置硬件包数目是$(rpm -qa | wc -l)个"
  13. sleep 3    //歇息3秒
  14. done
复造代码
22.单色球
  1. #!/bin/bash
  2. #7个球,6个白球,白球号码1-33中不克不及反复,1个蓝球,1-16抽
  3. red_ball=""
  4. blue_ball=""
  5. read -p "白球个数:" aa
  6. read -p "蓝球个数:" bb
  7. while :
  8. do
  9.    clear
  10.     echo "白球个数:$aa"
  11.     echo "蓝球个数:$bb"
  12.     echo "单色球开奖"
  13.     tmp=$[RANDOM%33+1]
  14.     echo "$red_ball " | grep -q -w $tmp && continue
  15.     red_ball+=" $tmp"
  16.     echo -en "\033[31m$red_ball\033[0m"
  17.     word=$(echo "$red_ball" | wc -w)
  18.     if [ $word -eq $aa ];then
  19.        while  :
  20.        do
  21.          clear
  22.          tmp2=$[RANDOM%16+1]
  23.          echo "$blue_ball" | grep -w -q $tmp && continue
  24.          blue_ball+=" $tmp2"
  25.          echo "白球个数:$aa"
  26.          echo "蓝球个数:$bb"
  27.          echo "单色球开奖"
  28.          echo -en "\033[31m$red_ball\033[0m"
  29.          echo -e "\033[32m$blue_ball\033[0m"
  30.          word2=$(echo "$blue_ball" | wc -w)
  31.             if [ $word2 -eq $bb ];then
  32.                exit
  33.             fi
  34.           sleep 1
  35.        done
  36.     fi
  37.     sleep 1
  38. done
复造代码


免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则