shell編程學習篇-Shell變量

參考shell編程:https://www.runoob.com/linux/linux-shell-variable.html
定義變量
定義變量  變量前不加$美圓符號(php語言中須要添加)
命名規則
與Java命名規則相同
  1.不能如下劃線、空格、數字、特殊符號開頭
  2.不能使用bash關鍵字
使用變量:聲明變量後,若是使用變量只須要在變量前面加$符號便可
test_name="aa"
  echo $test_name
只讀變量:使用 readonly 命令能夠將變量定義爲只讀變量,只讀變量的值不能被改變。


運行的結果以下
php

刪除變量:unset
unset variable_name
三種變量類型
1) 局部變量 局部變量在腳本或命令中定義,僅在當前shell實例中有效,其餘shell啓動的程序不能訪問局部變量。
  2) 環境變量 全部的程序,包括shell啓動的程序,都能訪問環境變量,有些程序須要環境變量來保證其正常運行。必要的時候shell腳本也能夠定義環境變量。
  3) shell變量 shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行
單引號:不會轉義,不列舉例子
單引號字符串的限制:
  單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
  單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,做爲字符串拼接使用。
多引號:能夠轉義,不列舉例子
雙引號的優勢:
  雙引號裏能夠有變量
  雙引號裏能夠出現轉義字符
獲取字符串長度
${#string}
提取子字符串
${String:index_start-1:char_account}
  列入從第二個字符開始截取6個字符
  ${string:1:6}
查找子字符串
expr index "$string" +查到的某個字符串
shell數組:bash支持一維數組(不支持多維數組),而且沒有限定數組的大小。
數組名=(值1,值2.....)
  例:array_name=(value1,value2......)
讀取數組
讀取數組元素值的通常格式是:
  ${數組名[下標]}
  例${array_name[0]}
獲取數組長度的方法與獲取字符串長度的方法相同,例如:
# 取得數組元素的個數
  length=${#array_name[@]}
  # 或者
  length=${#array_name[*]}
  # 取得數組單個元素的長度
  lengthn=${#array_name[n]}
Shell 註釋
以 # 開頭的行就是註釋,會被解釋器忽略。
  經過每一行加一個 # 號設置多行註釋
多行註釋
多行註釋還可使用如下格式:
  :<<EOF
  註釋內容...
  註釋內容...
  註釋內容...
  EOF
shell傳遞參數
腳本內獲取參數的格式爲:$n。n 表明一個數字,0表明執行的文件名,1 爲執行腳本的第一個參數,2 爲執行腳本的第二個參數,以此類推……
  $#	傳遞到腳本的參數個數
  $*	以一個單字符串顯示全部向腳本傳遞的參數。
            如"$*"用「"」括起來的狀況、以"$1 $2 … $n"的形式輸出全部參數。
  $$	腳本運行的當前進程ID號
  $!	後臺運行的最後一個進程的ID號
  $@	與$*相同,可是使用時加引號,並在引號中返回每一個參數。
            如"$@"用「"」括起來的狀況、以"$1" "$2" … "$n" 的形式輸出全部參數。
  $-	顯示Shell使用的當前選項,與set命令功能相同。
  $?	顯示最後命令的退出狀態。0表示沒有錯誤,其餘任何值代表有錯誤。
shell數組
聲明array_name=(value1 value2......)或array_name[0]=value1 array_name[1]=value2......
  取值      ${array_name[0]}
  取元素個數 ${#array_name[*]}或 ${#array_name[@]}
shell基本運算符
Shell 和其餘編程語言同樣,支持多種運算符,包括:
  算數運算符
  關係運算符
  布爾運算符
  字符串運算符
  文件測試運算符
  原生bash不支持簡單的數學運算,可是能夠經過其餘命令來實現,例如 awk 和 expr,expr 最經常使用。
  expr 是一款表達式計算工具,使用它能完成表達式的求值操做。
  1.算術運算符:與java相同    須要expr
  +	加法	`expr $a + $b` 結果爲 30。
  -	減法	`expr $a - $b` 結果爲 -10。
  *	乘法	`expr $a \* $b` 結果爲  200。
  /	除法	`expr $b / $a` 結果爲 2。
  %	取餘	`expr $b % $a` 結果爲 0。
  =	賦值	a=$b 將把變量 b 的值賦給 a。
  ==	相等。用於比較兩個數字,相同則返回 true。	[ $a == $b ] 返回 false。
  !=	不相等。用於比較兩個數字,不相同則返回 true。	[ $a != $b ] 返回 true。
  2.關係運算符:與java相同
  -eq   ==	檢測兩個數是否相等,相等返回 true。	[ $a -eq $b ] 返回 false。
  -ne   !=	檢測兩個數是否不相等,不相等返回 true。	[ $a -ne $b ] 返回 true。
  -gt   >	檢測左邊的數是否大於右邊的,若是是,則返回 true。	[ $a -gt $b ] 返回 false。
  -lt   <	檢測左邊的數是否小於右邊的,若是是,則返回 true。	[ $a -lt $b ] 返回 true。
  -ge   >=	檢測左邊的數是否大於等於右邊的,若是是,則返回 true。	[ $a -ge $b ] 返回 false。
  -le   <=	檢測左邊的數是否小於等於右邊的,若是是,則返回 true。	[ $a -le $b ] 返回 true。
  3.布爾運算符
  !	非運算,表達式爲 true 則返回 false,不然返回 true。	[ ! false ] 返回 true。
  -o	或運算,有一個表達式爲 true 則返回 true。	[ $a -lt 20 -o $b -gt 100 ] 返回 true。
  -a	與運算,兩個表達式都爲 true 才返回 true。	[ $a -lt 20 -a $b -gt 100 ] 返回 false。
  4.邏輯運算符
  &&	邏輯的 AND	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
  ||	邏輯的 OR	[[ $a -lt 100 || $b -gt 100 ]] 返回 true
  5.字符串運算符
  =	檢測兩個字符串是否相等,相等返回 true。	[ $a = $b ] 返回 false。
  !=	檢測兩個字符串是否相等,不相等返回 true。	[ $a != $b ] 返回 true。
  -z	檢測字符串長度是否爲0,爲0返回 true。	[ -z $a ] 返回 false。
  -n	檢測字符串長度是否不爲 0,不爲 0 返回 true。	[ -n "$a" ] 返回 true。
  $	        檢測字符串是否爲空,不爲空返回 true。	[ $a ] 返回 true。
  6.文件測試運算符
  文件測試運算符用於檢測 Unix 文件的各類屬性。
  -b file	檢測文件是不是塊設備文件,若是是,則返回 true。	[ -b $file ] 返回 false。
  -c file	檢測文件是不是字符設備文件,若是是,則返回 true。	[ -c $file ] 返回 false。
  -d file	檢測文件是不是目錄,若是是,則返回 true。	[ -d $file ] 返回 false。
  -f file	檢測文件是不是普通文件(既不是目錄,也不是設備文件),若是是,則返回 true。	[ -f $file ] 返回 true。
  -g file	檢測文件是否設置了 SGID 位,若是是,則返回 true。	[ -g $file ] 返回 false。
  -k file	檢測文件是否設置了粘着位(Sticky Bit),若是是,則返回 true。	[ -k $file ] 返回 false。
  -p file	檢測文件是不是有名管道,若是是,則返回 true。	[ -p $file ] 返回 false。
  -u file	檢測文件是否設置了 SUID 位,若是是,則返回 true。	[ -u $file ] 返回 false。
  -r file	檢測文件是否可讀,若是是,則返回 true。	[ -r $file ] 返回 true。
  -w file	檢測文件是否可寫,若是是,則返回 true。	[ -w $file ] 返回 true。
  -x file	檢測文件是否可執行,若是是,則返回 true。	[ -x $file ] 返回 true。
  -s file	檢測文件是否爲空(文件大小是否大於0),不爲空返回 true。	[ -s $file ] 返回 true。
  -e file	檢測文件(包括目錄)是否存在,若是是,則返回 true。	[ -e $file ] 返回 true。
相關文章
相關標籤/搜索