Bash编程语法
?使用visual studio code連接遠程機器:
Shell語法中,面向過程,不面向對象;非高級編程語言,屬于腳本語言,盡量用“”雙引號,不要用‘’單引號。
1.變量
? ? ? ? 1.1規則:a.變量命名只能是英文字母,數字,下劃線組成,首字符不能為數字;
? ? ? ? ? ? ? ? b.中間不能有空格,可以是下劃線;
? ? ? ? ? ? ? ? c.不能使用標點符號;
? ? ? ? ? ? ? ? d.不能使用bash內置的關鍵字(可使用help命令查看保留的關鍵字)
? ? ? ? 定義變量:name="chuntian"
? ? ? ? 只讀變量:readonly name
? ? ? ? 使用變量:$name
? ? ? ? 刪除變量:unset name(對只讀變量無效)
? ? ? ? 1.2如果想把一個命令的輸出保存到一個變量,使用: 變量名=$(命令) 的方式。? ? ? ? ?
????????????????注意:$(( ))2個括號代表數值運算;
? ? ? ? ? ? ? ? ? ?????????$( ) 1個括號代表命令執行;
? ? ? ? 1.3升級全局變量
? ? ? ? .sh結尾的文件中如果使用了$var來引用局部變量,不會生效,可以使用export關鍵字將局部變量升級為全局變量:
? ? ? ? ?1.4 .bashrc文件:全局環境文件
????????????????命令行中的export只能將變量設置為當前程序(進程)的全局變量,無法在其他進程中使用該變量,可以在~/.bashrc隱藏文件中使用export設置變量,這樣就所有的進程,所有地方,所有shell窗口中都能使用該變量:
? ? ? ? ? ? ? ? source .bashrc 生效?
?調用變量的方式:“${var_name}”
?env :查看系統的環境變量(同windows中的PATH命令)
?$?:獲取前一條命令執行結果,0代表成功,非0代表失敗?
?算數運算:$(( 1+1 )) 等效于 "$(expr 1 \+ 1)"
? ? ? ? 注意:$(( ))2個括號代表數值運算;
? ? ? ? ? ? ? ? ? ?$( ) 1個括號代表命令執行;
?2.字符串操作
? ? ? ? str_name="chuntian"
? ? ? ? 拼接字符串:greeting="hello,"$str_name""
?3.數組操作
? ? ? ? 定義數組:array_name=()
? ? ? ? ? ? ? ??單獨賦值:array_name[n]=valuen?
? ? ? ? ? ? ? ? 取數組元素:value_n=${array_name[n]}
條件表達式:條件表達式成功,返回0,不成功,返回非0.
? ? ? ? [ 1 = 1?] 兩邊必須有空格,等同[ 1 == 1?]
邏輯表達式:&& (python中的and),||(python中的or)
文件表達式:
????????-f 判斷輸入內容是否是一個文件
? ? ? ? -d 判斷輸入內容是否是一個目錄
? ? ? ? -x 判斷輸入內容是否可執行
? ? ? ? -e 判斷文件是否存在。
Shell 腳本的宏定義:
? ? ? ? #!/bin/bash?:代表用bash這個shell執行腳本代碼?
4.if條件控制:
? ? ? ? if [ condition1 ]
? ? ? ? then?
? ? ? ? ? ? ? ? command1
? ? ? ? elif [?condition2?]
? ? ? ? then
? ? ? ? ? ? ? ? command2
? ? ? ? ? ? ? ? .......
? ? ? ? else
? ? ? ? ? ? ? ? commandn
? ? ? ? fi
? ? ? ? ?舉例:? ??if [ a==b ];then echo "true";else echo "false";fi
????????????????????????if [[ a>b ]];then echo "a大于b";else echo "a小于b";fi
? ? ? ? ? ? ? ? ? ? ? ? tips:當if后面條件判斷為>或者<時,判斷條件需要用2個[]包裹,
???????????????????????????????即[[condition]]
? ? ? ? if [ $a -eq $b ];then echo ""$a" equal "$b"";elif [ $a -lt $b ];then echo ""$a" less than "$a"";elif [ $a -gt $b ];then echo ""$a" bigger than "$b"";fi
? ? ? ? tips:注意各個字符間都必須要有空格,還有盡量都使用雙引號,可以不考慮單雙引號交替.
5.for 循環
? ?格式1:
? ? ? ? for var in item1 item2....itemN
? ? ? ? do
? ? ? ? ? ? ? ? command1
? ? ? ? ? ? ? ? command2
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? ? ? commandN
? ? ? ? done
???格式2:
? ? ? ? max=10
? ? ? ? for ((i=1;i<=max;i++))
? ? ? ? do
? ? ? ? ? ? ? ? echo "${i}"
? ? ? ? done
? ? ? ? for loop in 1 2 3 4 5;do echo "I love chuntian"$loop""
? ? ? ? ?讀取文件,循環打印
6.while 循環
? ? ? ? while condition
? ? ? ? do
? ? ? ? ? ? ? ? command
? ? ? ? done
? ? ? ? ?舉例:注意比較while read i;do echo $i;done<tt.txt
????????????????????????和for i in $(cat tt.txt);do echo $i;done的區別
? ? ? ? ?此處應比較for i in $(cat tt.txt);do echo $i;done會將文件內的空格算作一行
? ? ? ? ? ? ? ?腳本:
? ? ? ? 執行結果:
?case:
#!/bin/bash #Author:chuntian_Tester #Date:2020-02-02 #test while loopif [ ! $# -eq 3 ];thenecho -e "Usage:\n $0 num1 +|-|*|/ num2"exit 1 ficase $2 in+)echo "$1 +$3 = $(($1 + $3 ))";;-)echo "$1 +$3 = $(($1 - $3 ))";;\*)echo "$1 +$3 = $(($1 * $3 ))";;/)echo "$1 +$3 = $(($1 / $3 ))";;*)echo "$2 can not calculate" esacexit 0效果:
7.函數
? ? ? ? 格式1: 函數名(){ 函數體?}
? ? ? ? 格式2: function 函數名{ 函數體?}
? ? ? ? ?函數傳參:
? ? ? ? ? ? read -p "請輸入用戶名:"? username 等同于python中的username=input("請輸入用戶名")
總結
- 上一篇: Qt setFocus无法生效问题
- 下一篇: SetFocus无效