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