case分支 shell函数 字符串的处理
目錄
?
case分支
編寫nginx腳本
shell函數(shù)
什么是函數(shù)?
使用函數(shù)的好處?
服務(wù)腳本中的函數(shù)應(yīng)用
如何定義一個函數(shù)
腳本中斷?
編寫腳本,從1-20中找到6的倍數(shù)
編寫腳本,for嵌套
字符串處理
1.字符串截取
編寫一個腳本,隨機截取字符串
編寫腳本,隨機截取八位密碼
2.字符串替換
3.字符串刪除
編寫批量修改擴展名的腳本(使用字符串的刪除功能)
編寫九九乘法表腳本
case分支
case分支,功能類似于if,不如if強大,但代碼比if精簡
case ?變量 ?in
模式1)
? ? ? 指令1;;
模式2)
? ? ? 指令2;;
*)
? ? 指令n
esac
?
root@server0 opt]# vim test01.sh #!/bin/bash case $1 in a)echo "aaa";; b)echo "bbb";; *)echo "請輸入a或b" esac?
[root@server0 opt]# vim test01.sh#!/bin/bash case $1 in t|T) #輸入小寫t或大寫T都可以touch $2";; m|M|mm) echo "2";; r) echo "請輸入t|m/r" esac編寫nginx腳本
- 1.在真機上找到nginx源碼包,遠(yuǎn)程復(fù)制到虛擬機server
- 2.在虛擬機server上解壓到當(dāng)前文件
- 3.部署安裝nginx腳本
natestat ?
netstat命令可以查看系統(tǒng)中啟動的端口信息,該命令常用選項如下:
-n ? ? ? ?以數(shù)字格式顯示端口號
-t ? ? ? ? ?顯示TCP連接的端口
-u ? ? ? ? 顯示UDP連接的端口
-l ? ? ? ? ?顯示服務(wù)正在監(jiān)聽的端口信息,如httpd啟動后,會一直監(jiān)聽80端口
-p ? ? ? ? 顯示監(jiān)聽端口的服務(wù)名稱是什么(也就是程序名稱)
-ntulp ? 查看該服務(wù)所有信息
[root@server0 sbin]# netstat -ntulp | grep nginx #查看nginx的服務(wù)信息 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 550/nginx: master p- 4.寫nginx狀態(tài)的腳本
[root@server0 sbin]# echo ?-e ?"\033[31mABCD\033[0m" ? ? ?#\033[ ? 要改顏色 ?\033[0m改為默認(rèn) ? ? #31m是紅色
ABCD
[root@server0 sbin]# echo ?-e ?"\033[32maaaa\033[0m" ? ? ? ?#32m為綠色
aaaa
[root@server0 sbin]# echo ?-e ?"\033[33maaaa\033[0m" ? ? ? ?#33m為黃色
aaaa
[root@server0 sbin]# echo ?-e ?"\033[34mbbb\033[0m" ? ? ? ? ?#34m為藍(lán)色
bbb
[root@server0 sbin]# echo ?-e ?"\033[35mffff\033[0m" ? ? ? ? ? ? #35m為紫色
ffff
31-35改前景色
41-45改背景色
91-95改為高亮
shell函數(shù)
什么是函數(shù)?
可以將公共的語句塊定義成一個名稱,來達(dá)到精簡腳本的目的
使用函數(shù)的好處?
- 使腳本代碼更簡潔,增強易讀性
- 提高shell腳本的執(zhí)行效率
服務(wù)腳本中的函數(shù)應(yīng)用
- 適用于比較復(fù)雜的啟動/終止控制操作
- 方便在需要時多次調(diào)用
如何定義一個函數(shù)
function ? 函數(shù)名{
? ? ? ?命令序列
? ? ? ? ....
}
或者
函數(shù)名(){
? ? 命令序列
? ? .....
}?
- 調(diào)用已定義的函數(shù)
格式: 函數(shù)名
先定義了才能調(diào)用,就好比腳本的"內(nèi)部命令"
- 函數(shù)傳值
格式: 函數(shù)名 ?值1 ?值2....
傳遞的值作為函數(shù)的"位置參數(shù)"
[root@server0 opt]# ?vim ?test04.sh#!/bin/bash
cecho() { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#在函數(shù)中定義變量,改變輸出參數(shù)的顏色
echo -e ?"\033[$1m$2\033[0m"
}
cecho ?32 ?qqqq ? ? ? ? ? ? ? ? ? ? ??
cecho ?33 ?zzzz
cecho ?34 ?ssss
cecho ?91 ?aaaa
[root@server0 sbin]# bash test04.sh
qqqq ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#我是綠色的
zzzz ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#我是黃色
ssss ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#我是藍(lán)色
aaaa ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#我是高亮紅
腳本中斷?
| 類型 | 含義 |
| break | 跳出當(dāng)前所在的循環(huán)體,執(zhí)行循環(huán)體后的語句塊 |
| continue | 跳過循環(huán)體內(nèi)余下的語句,重新判斷條件以決定是否需要執(zhí)行下一次循環(huán) |
| exit | 退出腳本,默認(rèn)返回值為0 |
編寫腳本,可以幫助用戶計算整數(shù)的求和
[root@server0 opt]# vim test05.sh #!/bin/bash x=0 while : do read -p "請輸入一個數(shù)字求和,0是結(jié)束" n [ $n -eq 0 ]&& break #還要繼續(xù)循環(huán)之后的任務(wù),所以要用break let x+=n done echo $x編寫腳本,從1-20中找到6的倍數(shù)
[root@server0 opt]# vim test06.sh #!/bin/bash for i in {1..20} dox=$[i%6][ $x -ne 0 ] && continue #當(dāng)$x不等于0,則終止當(dāng)前循環(huán),繼續(xù)下一次循環(huán)echo $i done [root@server0 opt]# bash test06.sh 6 12 18編寫腳本,for嵌套
[root@server0 opt]# vim test07.sh #!/bin/bash for i in {1..3} dofor i in {1..3}doecho -n "X" #echo -n 不換行輸出doneecho done [root@server0 opt]# bash test07.sh XXX XXX XXX字符串處理
1.字符串截取
- 使用${}表達(dá)式,格式: ?${變量名:起始位置:長度} ? ? (起始位置的編號從0開始,可省略)
編寫一個腳本,隨機截取字符串
[root@server0 opt]# vim test08.sh #!/bin/bash x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 n=$[RANDOM%62] echo ${x:n:1} [root@server0 opt]# bash test08.sh 7 [root@server0 opt]# bash test08.sh y [root@server0 opt]# bash test08.sh J [root@server0 opt]# bash test08.sh r [root@server0 opt]# bash test08.sh r編寫腳本,隨機截取八位密碼
[root@server0 opt]# vim test08.sh #!/bin/bash x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 for i in {1..8} do n=$[RANDOM%62] pass=${x:n:1} pass1=$pass1$pass done echo $pass1 pass1= #設(shè)置pass1的值為空,每次運行后自動還原pass1的值 [root@server0 opt]# bash test08.sh BTfQh0E5 [root@server0 opt]# bash test08.sh wjpBZPQp [root@server0 opt]# . test08.sh wQw6XEBR [root@server0 opt]# . test08.sh b8ag5frW2.字符串替換
- 使用${}表達(dá)式,格式: ?替換第1個匹配結(jié)果 ?${變量名/old/new}
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?替換全部匹配結(jié)果 ?${變量名//old/new}
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在一定程度上可以刪除某個結(jié)果${變量名/old/}
3.字符串刪除
- 使用${}表達(dá)式,格式: ?${變量名# ?} ?從左往右刪除
- 使用${}表達(dá)式,格式: ${變量名% ???} 從右往左刪除
?按條件掐頭去尾
- 字符串掐頭: ?從左向右,最短匹配刪除 ? ?格式: ? ${變量名#*關(guān)鍵詞} ?
- ? ? ? ? ? ? ? ? ? ? ?從左向右,最長匹配刪除 ? ?格式: ? ${變量名##*關(guān)鍵詞}
- 字符串去尾: ?從右向左,最短匹配刪除 ? ?格式: ?${變量名%關(guān)鍵詞*}
- ?? ? ? ? ? ? ? ? ? ? 從右向左,最長匹配刪除 ? ?格式: ?${變量名%%關(guān)鍵詞*}
編寫批量修改擴展名的腳本(使用字符串的刪除功能)
[root@server0 opt]# touch abc{1..10}.txt #批量創(chuàng)建文件 [root@server0 opt]# ls abc10.txt abc3.txt abc6.txt abc9.txt nginx-1.12.2 test01.sh test06.sh test09.sh abc1.txt abc4.txt abc7.txt lnmp_soft nginx-1.12.2.tar.gz test02.sh test07.sh abc2.txt abc5.txt abc8.txt lnmp_soft.tar.gz rh test05.sh test08.sh [root@server0 opt]# vim test09.sh #!/bin/bash for i in `ls *.$1` do n=${i%.*} #n是去除了擴展名的文件名 mv $i $n.$2 #將原文件修改為文件名.doc done [root@server0 opt]# bash test09.sh txt doc [root@server0 opt]# ls abc10.doc abc3.doc abc6.doc abc9.doc nginx-1.12.2 test01.sh test06.sh test09.sh abc1.doc abc4.doc abc7.doc lnmp_soft nginx-1.12.2.tar.gz test02.sh test07.sh abc2.doc abc5.doc abc8.doc lnmp_soft.tar.gz rh test05.sh test08.sh編寫九九乘法表腳本
[root@server0 opt]# vim test10.sh #!/bin/bash for i in {1..9} dofor j in `seq $i`doecho -n "${i}x$j=$[i*j] "doneecho done [root@server0 opt]# bash test10.sh 1x1=1 2x1=2 2x2=4 3x1=3 3x2=6 3x3=9 4x1=4 4x2=8 4x3=12 4x4=16 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81?
總結(jié)
以上是生活随笔為你收集整理的case分支 shell函数 字符串的处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell条件测试操作 if分支
- 下一篇: 字符串的初值 正则表达式 sed应