你该认识这样的Linux_shell之变量操作符与分支判断
? ? ? ? ? ? ? ? ? ? ? ? ? ? Linux shell之變量與操作符
聲明與簡介
Shell是系統(tǒng)的用戶界面,它提供了用戶跟內(nèi)核進(jìn)行交互的橋梁。Shell是一個命令解釋器,它接收用戶輸入的命令并送到內(nèi)核去執(zhí)行。
本文主要介紹圍繞Shell的變量、參數(shù)、操作符、分支循環(huán)來展開,主要介紹變量的定義、使用;參數(shù)的使用、常見的操作符、分支與循環(huán)的常見使用方法。
注: 至少有一臺linux環(huán)境,當(dāng)前驗證環(huán)境是Centos 8。
Linux 各Shell版本示例定義變量
這里的變量區(qū)別于系統(tǒng)變量,是用戶根據(jù)業(yè)務(wù)需要自定義的變量。
使用自定義變量
#!/bin/sh echo "It is a test" name="Hi Shell" name2 = "兩邊都有空格" name3 ="僅左邊有空格" echo $name echo $name2 echo $name3#注:1 定義變量并賦值時“=”兩邊都不能有空格,否則會報錯,且變量值取不到。定義數(shù)組
變量只能存一個值,而數(shù)組可以存多個值。
# 1 定義個數(shù)組并安裝索引打印、打印所有元素。 #!/bin/bash echo "It is a test" arraydemo=("Hi" There Shell array) echo ${arraydemo[2]} echo ${arraydemo[*]}#結(jié)果 It is a test Shell Hi There Shell array#注:索引序號從0開始。# 2 通過unset移除數(shù)組元素 #!/bin/bash echo "It is a test" arraydemo=("Hi" There Shell array) unset arraydemo[2] echo ${arraydemo[0]} echo ${arraydemo[*]}#結(jié)果 It is a test Hi Hi There array命令變量
如果變量對應(yīng)是某個命令,可以通過$結(jié)合“( )”來引用。也可以通過“` `”來引用。
# 取當(dāng)前腳本的目錄,并賦值給變量后打印出來。#Way1 $結(jié)合“( )”,類似于執(zhí)行命令。#!/bin/bash echo "It is a test" curr_dir=$(pwd) echo $curr_dir#Way2 ``號,類似于執(zhí)行命令。#!/bin/bash curr_dir=`pwd` echo $curr_dir#結(jié)果 /home/shenliang使用系統(tǒng)變量
系統(tǒng)變量系統(tǒng)級的環(huán)境變量,一般定義在/etc/profile、~/.bash_profile、~/.bash_rc內(nèi)。
#打印當(dāng)前JDK主目錄 printenv JAVA_HOME #結(jié)果 /home/shenliang/software/jdk1.8.0_161變量范圍
Shell的變量不僅可以作用于當(dāng)前腳本,還可以被其它腳本引用。
# 1如果想一個shell腳本里的變量被另外個shell腳本調(diào)用,則需要加export關(guān)鍵字。 # script1.sh的內(nèi)容 #!/bin/bash var="我在腳本1里" export var ./script2.sh# script2.sh的內(nèi)容 #!/bin/bash echo $var# 執(zhí)行script1.sh后的結(jié)果 # ./script1.sh 我在腳本1里# 2 如果在script2.sh里修改同名變量的值,則此時打印的為script2.sh里的值。 # script2.sh的內(nèi)容 #!/bin/bash var="我在腳本2里" echo $var# 執(zhí)行script1.sh后的結(jié)果 # ./script1.sh 我在腳本2里參數(shù)
參數(shù)是shell腳本接受的外部傳遞的值,即可實現(xiàn)腳本或者函數(shù)的動態(tài)調(diào)用。
參數(shù)類型
# 通過參數(shù)傳遞給腳本調(diào)用。 #!/bin/bash echo "當(dāng)前執(zhí)行的文件是: $0,$1,$2" echo "Hello $*" echo "$#" exit 0#執(zhí)行 ./shell_case1.sh "參數(shù)1" "參數(shù)2"#結(jié)果 當(dāng)前執(zhí)行的文件是: ./shell_case1.sh,參數(shù)1,參數(shù)2 Hello 參數(shù)1 參數(shù)2 2注:1 其中$0參數(shù)代表當(dāng)前文件 2 $1…$10代表shell可接受的參數(shù) 3 $* 對應(yīng)所有參數(shù)的值 4 $# 對應(yīng)參數(shù)的個數(shù),比如對應(yīng)上例為2。分支判斷
且與或控制多命令執(zhí)行
多個命令合并執(zhí)行時,通過&&(且)或者||(或)來控制整個命令的執(zhí)行。
且&&連接多命令
# 用&&將ls命令和date命令結(jié)合在一起,如果ls命令執(zhí)行有結(jié)果,則執(zhí)行date命令,反之不執(zhí)行。 ls -a | grep label && date +'%Y-%m-%d' #結(jié)果 label.sed 2021-06-09#如果第一命令沒結(jié)果,比如grep后的關(guān)鍵字修改成label2,那么第二個命令,也就是date將不再執(zhí)行。ls -a | grep label2 && date +'%Y-%m-%d'或||連接多命令
#用||將ls命令和date命令結(jié)合在一起,如果ls命令執(zhí)行無結(jié)果(返回為False),則執(zhí)行date命令。 ls -a | grep label2 || date +'%Y-%m-%d' #結(jié)果 2021-06-09test命令判斷數(shù)字字符串文件
test命令用于檢驗?zāi)硞€條件是否滿足,一般用于數(shù)字、字符串、文件的條件判斷。
數(shù)值類型比較
# 數(shù)字類型比較,這里用eq(等號)演示。 #!/bin/bash num1=13 num2=23 if test $num1 -eq $num2 then echo "兩數(shù)相等" else echo "兩數(shù)不等" fi# 結(jié)果 兩數(shù)不等注:比較符號匯總,-eq (相等)、-ne(不等于)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于)。字符串類型比較
# 字符串類型比較,這里用n(等號)演示。#!/bin/bash str1="Hello" if test -n $str1 then echo "字符串長度大于0" else echo "空字符串" fi#結(jié)果 字符串長度大于0注:字符串比較匯總,=(相等)、!=(不等)、-z(空字符串時為真)、-n(字符串長度大于0時為真)。文件比較
# 文件判斷,這里用e(存在)演示。#!/bin/bash if test -e $1 then echo "文件$1存在" else echo "文件$1不存在" fi# case1 ./shell_case1.sh shell_case1.sh #結(jié)果 文件shell_case1.sh存在#case2 ./shell_case1.sh shell_case12.sh #結(jié)果 文件shell_case12.sh不存在注:文件判斷符號匯總: -e(存在)、-r(存在且可讀)、-w(存在且可寫)、-x(存在且可執(zhí)行)、-s(存在且至少有一個字符)、-d(目錄存在)、-f(文件存在且是普通文件)、-c(文件存在且是字符特殊類型文件)、-b(文件存在且是塊文件)。多條件組合
# test多條件的連接#!/bin/bash if test -s $1 -a 34 -gl 24 then echo "文件$1有內(nèi)容" else echo "文件$1無內(nèi)容" fi#結(jié)果 文件nothing.txt無內(nèi)容注: 1 這里nothing.txt是事先touch出來的空文件。2 多條件組合,可以通過-a(and)且、-o(or)或、!(not)非,其中!優(yōu)先級最高,-o最低。if 條件判斷語句
單if判斷
# 僅含if then的判斷語句, 如果參數(shù)1大于參數(shù)2則輸出結(jié)果 if [ $1 -gt $2 ]; then echo "數(shù)$1大于$2" fi#執(zhí)行 ./shell_case1.sh 34 12#結(jié)果 數(shù)34大于12if else 判斷
# 含if else的判斷語句,如果參數(shù)1大于參數(shù)2輸出結(jié)果1,反之輸出結(jié)果2。 #!/bin/bash if [ $1 -gt $2 ]; then echo "數(shù)$1大于$2" else echo "數(shù)$1小于$2" fi#執(zhí)行 ./shell_case1.sh 12 34#結(jié)果 數(shù)12小于34if elif多條件
# 通過elif then實現(xiàn)多分支判斷。 #!/bin/bash if [ $1 -gt 30 ]; then echo "數(shù)$1大于30" elif [ $1 -gt 20 ]; then echo "數(shù)$1大于20" elif [ $1 -gt 10 ]; then echo "數(shù)$1大于10" else echo "數(shù)$1小于10" fi# 執(zhí)行 ./shell_case1.sh 32 數(shù)32大于30 ./shell_case1.sh 22 數(shù)22大于20 ./shell_case1.sh 12 數(shù)12大于10 ./shell_case1.sh 2 數(shù)2小于10case條件判斷語句
使用case進(jìn)行判斷
#!/bin/bash case $1 in [A-B]) echo "成績優(yōu)異,級別是$1";; [C-D]) echo "成績中等,級別是$1";; [E-F]) echo "成績偏下,級別是$1";; *) echo "成績糟糕";; esac#執(zhí)行 ./shell_case1.sh "A" 成績優(yōu)異,級別是A ./shell_case1.sh "C" 成績中等,級別是C ./shell_case1.sh "E" 成績偏下,級別是E ./shell_case1.sh "G" 成績糟糕 ./shell_case1.sh "H" 成績糟糕注:1 這里的case和esac是一對關(guān)鍵字。 2 case1) 對應(yīng)某個分支判斷, 3 每個;;前是具體的執(zhí)行語句。 4 *) 類似于If的else,即其它情況。 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的你该认识这样的Linux_shell之变量操作符与分支判断的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打开高效文本编辑之门_Linux awk
- 下一篇: 你该认识这样的Linux_shell之循