日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

case分支 shell函数 字符串的处理

發(fā)布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 case分支 shell函数 字符串的处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

?

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
student@room9pc01 ~]$ cd /linux-soft/02 [student@room9pc01 02]$ ls ceph10.iso exam exam.tar.gz grade grade.tar.gz lnmp_soft.tar.gz [student@room9pc01 02]$ scp lnmp_soft.tar.gz root@172.25.0.11:/opt lnmp_soft.tar.gz 100% 155MB 18.0MB/s 00:08
  • 2.在虛擬機server上解壓到當(dāng)前文件
[root@server0 opt]# ls lnmp_soft.tar.gz rh test01.sh[root@server0 opt]# tar -xf lnmp_soft.tar.gz -C . #解壓到當(dāng)前[root@server0 opt]# ls lnmp_soft lnmp_soft.tar.gz rh test01.sh[root@server0 opt]# ls lnmp_soft apache-tomcat-8.0.30.tar.gz php-fpm-5.4.16-42.el7.x86_64.rpm apache-tomcat-9.0.6.tar.gz php-mbstring-5.4.16-42.el7.x86_64.rpm buffer.sh php_scripts DenyHosts-2.6.tar.gz pssh-2.3.1-5.el7.noarch.rpm install_lnmp.sh python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm jenkins-2.164.3-1.1.noarch.rpm redis-3.0.6.tar.gz libevent-devel-2.0.21-4.el7.x86_64.rpm tomcat_session nginx-1.10.3.tar.gz varnish-5.2.1.tar.gz nginx-1.12.2.tar.gz vpn nginx-1.15.8.tar.gz wordpress.zip nginx.conf.bak www_template.zip nginx.spec zabbix-3.4.4.tar.gz php-bcmath-5.4.16-42.el7.x86_64.rpm [root@server0 opt]# cp lnmp_soft/nginx-1.12.2.tar.gz . #復(fù)制到當(dāng)前[root@server0 opt]# ls lnmp_soft lnmp_soft.tar.gz nginx-1.12.2.tar.gz rh test01.sh
  • 3.部署安裝nginx腳本
[root@server0 opt]# vim test02.sh #!/bin/bash yum -y install gcc openssl-devel pcre-devel #安裝源碼編譯包以及依賴包們 tar -xf nginx-1.12.2.tar.gz #解壓 cd nginx-1.12.2 #切換到nginx的默認(rèn)路徑 ./configure #源碼編譯安裝 make make install [root@server0 opt]# bash test02.sh[root@server0 opt]# cd /usr/local/nginx/sbin/ #切換到nginx程序所在目錄[root@server0 sbin]# ls #查看,nginx為可執(zhí)行文件 nginx [root@server0 sbin]# ./nginx #執(zhí)行nginx程序 [root@server0 sbin]# systemctl stop firewalld #關(guān)閉防火墻#此時在真機上打開瀏覽器訪問172.25.0.11可以看到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]# vim test03.sh #!/bin/bash case $1 in kai)netstat -ntulp | grep -q nginxif [ $? -eq 0 ];thenexitfi/usr/local/nginx/sbin/nginx;; #開啟nginx服務(wù) guan)netstat -ntulp | grep -q nginxif [ $? -ne 0 ];thenexit fi/usr/local/nginx/sbin/nginx -s stop;; #關(guān)閉nginx服務(wù) res)/usr/local/nginx/sbin/nginx -s stop #重起nginx服務(wù)(先關(guān)閉再開啟)/usr/local/nginx/sbin/nginx;; #case分支在命令輸完再寫雙分號 cha)netstat -ntulp | grep -q nginx #grep -q 等同于/dev/null,把輸出信息扔到黑洞[ $? -eq 0 ]&& echo -e "\033[32m服務(wù)已開啟\033[0m" || echo -e "\033[31m服務(wù)未開啟\033[0m";; #當(dāng)服務(wù)開啟時候顯示綠色,未開啟顯示紅色 *) echo "請輸入kai|guan|res|cha" esac [root@server0 sbin]# bash test03.sh guan #關(guān)閉nginx服務(wù)[root@server0 sbin]# bash test03.sh kai #開啟nginx服務(wù)[root@server0 sbin]# bash test03.sh res #重起nginx服務(wù)[root@server0 sbin]# bash test03.sh cha #查看當(dāng)前nginx服務(wù)狀態(tài) 服務(wù)未開啟

[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 b8ag5frW

2.字符串替換

  • 使用${}表達(dá)式,格式: ?替換第1個匹配結(jié)果 ?${變量名/old/new}
  • ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?替換全部匹配結(jié)果 ?${變量名//old/new}
  • ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在一定程度上可以刪除某個結(jié)果${變量名/old/}

3.字符串刪除

  • 使用${}表達(dá)式,格式: ?${變量名# ?} ?從左往右刪除
[root@server0 opt]# a=`head -1 ?/etc/passwd` [root@server0 opt]# echo $a root:x:0:0:root:/root:/bin/bash [root@server0 opt]# echo ${a#root} #刪除到第一個root :x:0:0:root:/root:/bin/bash [root@server0 opt]# echo ${a##*root} #刪除到最后一個root :/bin/bash [root@server0 opt]# echo ${a##*/} #刪除到最后一個/ bash
  • 使用${}表達(dá)式,格式: ${變量名% ???} 從右往左刪除
[root@server0 ~]# a=`head -1 /etc/passwd` [root@server0 ~]# echo $a root:x:0:0:root:/root:/bin/bash [root@server0 ~]# echo ${a%bash} #刪除到第一個bash root:x:0:0:root:/root:/bin/ [root@server0 ~]# echo ${a%/*} #刪除到第一個/bash root:x:0:0:root:/root:/bin [root@server0 ~]# echo ${a%%/*} #刪除到最后一個/ root:x:0:0:root: [root@server0 ~]# echo ${a%%:*} #刪除到最后一個: root

?按條件掐頭去尾

  • 字符串掐頭: ?從左向右,最短匹配刪除 ? ?格式: ? ${變量名#*關(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。