脚本从简到深练习
題要:本文與該鏈接結合初學者適用:https://blog.csdn.net/kali_yao/article/details/119970869?spm=1001.2014.3001.5502
后期會不間斷的寫入腳本,記的關注哦
1.搭建yum
#!/bin/bash #部署yum倉庫 mount /dev/cdrom /mydvd rm -rf /etc/yum.repos.d/*.repo echo "[abc] //這里由于喊出的內容是有換行所以要用引號 name=xxx baseurl=file:///mydvd enabled=1 gpgcheck=0" > /etc/yum.repos.d/abc.repo //最后使用重定向保存到yum配置文件中2.安裝apache服務
#!/bin/bash yum -y install httpd //裝包 echo "web-test~~~" > /var/www/html/index.html //定義主頁內容 systemctl restart httpd //開服務 systemctl enable httpd //設置開機自啟3.安裝ftp服務
yum -y install vsftpd &> /dev/null //安裝ftp,不顯示任何信息 systemctl restart vsftpd systemctl enable vsftpddev下的null相當于黑洞,不需要的信息都可以扔到里面讓其消失。
?4.創建用戶及密碼
#!/bin/bash useradd $1 //使用位置變量$1,在執行腳本時靈活定義用戶名 echo "$2" | passwd --stdin $1 //使用位置變量$2定義密碼5.使用read指令,以交互式使用腳本?
#!/bin/bash read -p "請輸入用戶名稱:" n //使用變量n存儲用戶敲的名字 (-p就是你要輸入什么交互式的指令) useradd $n read -p "請輸入密碼:" m //使用變量m存儲用戶敲的密碼 echo "$m" | passwd --stdin $n6.再次改良腳本
#!/bin/bash read -p "請輸入用戶名稱:" n useradd $n stty -echo read -p "請輸入密碼:" m echo stty echo echo "$m" | passwd --stdin $n7.條件測試及邏輯符號
#!/bin/bash [ $USER == root ] || exit //如果用戶不是管理員就退出 [ $USER != root ] && exit //效果同上,另一種寫法 yum -y install vsftpd systemctl restart vsftpd systemctl enable vsftpd8.創建用戶(read交互式條件測試及邏輯符運用)
#!/bin/bash read -p "請輸入用戶名稱:" n [ -z $n ] && echo "你倒是給個名字阿!" && exit //判斷用戶名為空的話就退出腳本 useradd $n stty -echo read -p "請輸入密碼:" m echo stty echo echo "$m" | passwd --stdin $n9.編寫腳本,每2分鐘檢查服務器登錄賬戶數量,如果超過3人 發郵件通知管理員
vim test01.sh #!/bin/bash n=$(who | wc -l) //n里面存儲了登錄數量 [ $n -gt 3 ] && echo "服務器被入侵!可能牛老師來了!" | mail -s test root//用n和3對比,如果超過3就發郵件chmod +x test01.sh //腳本寫完后,賦予x權限 crontab -e //編寫計劃任務 */2 * * * * /opt/test01.sh //每2分鐘執行腳本,然后保存退出 只要目前超過3人登錄系統,那么每隔2分鐘就會收到郵件,使用mail命令 查看郵件10.if測試網絡聯通性
#!/bin/bash ping -c 3 -i 0.2 -W 1 $1 &> /dev/null if [ $? -eq 0 ];thenecho "通了!" elseecho "不通!" fi11.if多分支測試輸入成績測試
#!/bin/bash read -p "期末考試成績如何?" n if [ $n -ge 90 ];thenecho "優秀!" elif [ $n -ge 80 ];thenecho "良好!" elif [ $n -ge 60 ];thenecho "及格!" elseecho "晚上沒飯了!" fi12.for循環ping網絡
#!/bin/bash x=0 y=0 for i in {1..15} doping -c 3 -i 0.2 -W 1 192.168.4.$i &> /dev/nullif [ $? -eq 0 ];thenecho "4.$i 通了!"let x++elseecho "4.$i 不通!"let y++fi done echo "$x臺通了,$y臺不通"13.猜數腳本
#!/bin/bash x=$[RANDOM%100]??? //RANDOM是可以得到隨機數的變量,除以100取余數可以得到零到99之間的隨機數,并且存到變量x中 y=0???? //這里還可以定義猜的次數,一次沒猜時是0次 while :???? //無限循環 do let y++??? //每猜一次,把y+1 read -p "請輸入一個整數(0-99):" n ???????//將用戶給的數字存到變量n中 if [ $n -eq$x ];then????? //使用if多分枝加條件測試判斷n是否等于xecho "恭喜!猜對了!猜了$y次"???? //如果n等于x就喊出這句話exit elif [ $n -gt $x ];then?????????????????????????? //如果n比x大echo "猜大了!" else????????????????????????????????????????????????????????? //還有最后一種情況echo "猜小了!" fi done14.case控制簡單的nginx服務
1.配置nginx服務,nginx與httpd一樣也是網站服務,但安裝和使用方式有所不同
cp lnmp_soft/nginx-1.17.6.tar.gz /opt //拷貝nginx到opt下 cd /opt vim test03.sh #!/bin/bash yum -y install gcc make pcre-devel openssl-devel //安裝依賴 tar -xf nginx-1.17.6.tar.gz //釋放nginx的tar包 cd nginx-1.17.6 //進入nginx目錄 ./configure //配置 make //編譯 make install //安裝ls? /usr/local/nginx???? //腳本執行完畢后查看
systemctl stop httpd? //關閉之前網站服務
/usr/local/nginx/sbin/nginx?? //開啟nginx
systemctl stop firewalld?? //關閉防火墻
2.使用case分支編寫腳本,用來控制nginx服務
#!/bin/bash case $1 in //使用執行腳本后的第1個位置變量作為匹配對象 start|kai|k) //如果$1是start|kai|k中的任意一個就執行下面命令/usr/local/nginx/sbin/nginx;; //開服務 stop|guan) //如果$1是stop|guan中的任意一個就執行下面命令/usr/local/nginx/sbin/nginx -s stop;; //關服務 restart|cq) //如果$1是restart|cq中的任意一個就執行下面命令/usr/local/nginx/sbin/nginx -s stop //先關閉 /usr/local/nginx/sbin/nginx;; //再開啟,相當于重啟服務 cha|status)netstat -ntulp | grep -q nginx[ $? -eq 0 ] && echo "nginx正在運行。。。" || echo "nginx未開啟。。。";; *)echo "請輸入start|stop|restart" esac15.再次將之前腳本改良,加入可以定義顏色的函數,然后下方調用 并且加入判斷效果,如果服務已經開啟不會報錯
#!/bin/bash c(){ //定義函數名字叫c,可以用來輸出不同顏色的內容 echo -e "\033[$1m$2\033[0m" } case $1 in start|kai|k)netstat -ntulp | grep -q nginx //檢測nginx是否開啟[ $? -eq 0 ] && c 32 "nginx已開啟" && exit //如果開啟就喊出提示并推出/usr/local/nginx/sbin/nginx;; //如果沒開啟就正常執行開啟任務 stop|guan)/usr/local/nginx/sbin/nginx -s stop;; restart|cq)/usr/local/nginx/sbin/nginx -s stop/usr/local/nginx/sbin/nginx;; cha|status)netstat -ntulp | grep -q nginx[ $? -eq 0 ] && c 32 "nginx正在運行。。。" || c 31 "nginx未開啟。。。";; *)echo "請輸入start|stop|restart" esac16.echo一個好玩的腳本
#!/bin/bash for i in {1..20}; dofor j in {1..50};docolor=$[RANDOM%7+31]echo -e "\033[1;${color};5m*\033[0m\c"doneecho done17.編寫腳本,實現批量修改文件擴展名
#!/bin/bash #批量修改擴展名 for i in $(ls *.txt) //找到所有的txt文件交給for循環 doa=${i%.*} //用去尾的方法刪除擴展名mv $i $a.doc //再將源文件修改為doc的 done #!/bin/bash #批量修改擴展名 for i in $(ls *.$1) //要改啥類型的文件用$1位置變量表示 doa=${i%.*}mv $i $a.$2 //要改成啥,用$2表示 done18.倒計時腳本
#!/bin/bash #功能描述(Description):通過tput定位光標,在屏幕特定位置打印當前的計算機時間.#使用Ctrl+C中斷腳本時顯示光標. trap 'tput cnorm;exit' INT EXIT#定義數組變量,該數字有9個元素,每行是1個元素,每一個數字占用12列. #0的數組坐標位置為0-11,1的數組坐標位置為12-23,依此類推. number=( ' 0000000000 111 2222222222 3333333333 44 44 5555555555 6666666666 777777777 888888888 9999999999 ' ' 00 00 11111 22 33 44 44 55 66 77 77 88 88 99 99 ' ' 00 00 111111 22 33 44 44 55 66 77 77 88 88 99 99 ' ' 00 00 11 22 33 44 44 55 66 77 88 88 99 99 ' ' 00 00 11 2222222222 3333333333 44444444444 5555555555 6666666666 77 888888888 9999999999 ' ' 00 00 11 22 33 44 55 66 66 77 88 88 99 ' ' 00 00 11 22 33 44 55 66 66 77 88 88 99 ' ' 00 00 11 22 33 44 55 66 66 77 88 88 99 ' ' 0000000000 1111111111 2222222222 3333333333 44 555555555 6666666666 77 888888888 9999999999 ' )#獲取計算機時間,并分別提取個位和十位數字. get_time(){if [ -z "$1" ];thenecho "Usage:$0 倒計時分鐘"exitfisec=$[$1*60] }#將數組中的某個數組打印出來. print_time(){#從第幾個位置開始提取數組元素,0就從0開始,1就從12開始,2就從24開始,依此類推.begin=$[$1*12]for i in `seq 0 ${#number[@]}` #0-9的循環.dotput cup $[i+5] $2echo -en "\033[91m${number[i]:$begin:12}\033[0m"done }#依次打印小時,分鐘,秒(個位和十位分別打印). get_time $1 while : do[ $sec -lt 0 ] && exittput civis #隱藏光標.tput cleartput cup 3 16echo "倒計時:"for j in `seq ${#sec}`donum=`echo $sec | cut -c $j`y=$[j*16]print_time $num $ydonelet sec--echosleep 1 done19.國際象棋背景
#!/bin/bash color1='\033[46m \033[0m' color2='\033[47m \033[0m' for i in {1..8};dofor k in {1..2};doif [ $[i%2] -eq 0 ];thenfor j in {1..4};doecho -en "$color1$color2"doneelsefor j in {1..4};doecho -en "$color2$color1"donefiecho done done20.
#!/bin/bash read -p "請輸入n值:" num i=0 while [ $i -le $num ];doif [ $i -eq 0 ];thennum1=0echo $num1elif [ $i -eq 1 ];thennum2=1echo $num2elsetmp=$num2let num2+=num1num1=$tmpecho $num2filet i++ done21.可以查看各種服務器的信息
#!/bin/bash while : do clear //清屏 ifconfig eth0 | awk '/RX p/{print "服務器eth0網卡的接收流量是"$5"字節"}' ifconfig eth0 | awk '/TX p/{print "服務器eth0網卡的發送流量是"$5"字節"}' df -h | awk '/\/$/{print "根分區剩余容量是"$4}' awk 'END{print "服務器賬戶總數是"NR"個"}' /etc/passwd echo "當前已登陸賬戶數量是$(who | wc -l)個" free -h | awk '/^Mem:/{print "服務器內存剩余容量是"$4}' uptime | awk '{print "cpu的15分鐘平均負載是"$NF}' echo "服務器安裝軟件包數量是$(rpm -qa | wc -l)個" sleep 3 //休息3秒 done22.雙色球
#!/bin/bash #7個球,6個紅球,紅球號碼1-33中不能重復,1個藍球,1-16抽 red_ball="" blue_ball="" read -p "紅球個數:" aa read -p "藍球個數:" bb while : doclearecho "紅球個數:$aa"echo "藍球個數:$bb"echo "雙色球開獎"tmp=$[RANDOM%33+1]echo "$red_ball " | grep -q -w $tmp && continuered_ball+=" $tmp"echo -en "\033[31m$red_ball\033[0m"word=$(echo "$red_ball" | wc -w)if [ $word -eq $aa ];thenwhile :docleartmp2=$[RANDOM%16+1]echo "$blue_ball" | grep -w -q $tmp && continueblue_ball+=" $tmp2"echo "紅球個數:$aa"echo "藍球個數:$bb"echo "雙色球開獎"echo -en "\033[31m$red_ball\033[0m"echo -e "\033[32m$blue_ball\033[0m"word2=$(echo "$blue_ball" | wc -w)if [ $word2 -eq $bb ];thenexitfisleep 1donefisleep 1 done總結
- 上一篇: ansible加密敏感数据
- 下一篇: 配置sudo权限