SHELL變量操作和賦值規則大全


echo "this is the ${num}nd" --變量后接字符組要大括號括起來
fullname="$first_name $last_name $shell"    多個變量想連需要雙引號
 
cut -b5-9 hosts
expr 2 "+" 3 | tee 5.txt
 
echo "$SHELL" 雙引號可以打出變量
echo '$SHELL'  單引號不可以打出變量
echo \$SHELL 反斜杠也不可以

單引號使用變量

'${user}'

typeset -u name指定變量大寫
typeset -l name指定變量小寫
單引號內嵌套單引號即可使用變量。
 

echo輸出保留換行符

echo "${foo}"

 

 

單引號字串中不能出現單引號(對單引號使用轉義符后也不行)。

單引號不行,雙引號里可以出現轉義字符

 

截斷字符串

string="alibaba is a great company"

echo ${string:1:4} #輸出liba

獲取字符串長度

string="abcd"

echo ${#string} #輸出 4

拼接字符串

your_name="qinjx" 

greeting="hello, "$your_name" !" 

greeting_1="hello, ${your_name} !" 

echo $greeting $greeting_1

 
 
                                                        關系運算符列表
運算符 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
-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。
關系運算符只支持數字,不支持字符串,除非字符串的值是數字。
算術運算符列表
運算符 說明 舉例
+ 加法 `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。
注意:條件表達式要放在方括號之間,並且要有空格,例如 [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]。
 
布爾運算符列表
運算符 說明 舉例
! 非運算,表達式為 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。
或   -o  ||
and 是 -a  &&
 
字符串運算符列表
運算符 說明 舉例
= 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是否為0,為0返回 true。 [ -z $a ] 返回 false。
-n 檢測字符串長度是否為0,不為0返回 true。 [ -z $a ] 返回 true。
str 檢測字符串是否為空,不為空返回 true。 [ $a ] 返回 true。
文件測試運算符列表
操作符 說明 舉例
-b file 檢測文件是否是塊設備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是否是字符設備文件,如果是,則返回 true。 [ -b $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。
if [ ! -d $num ]               如果不存在目錄$num
 
變量 含義
$0 當前腳本的文件名
$n 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$# 傳遞給腳本或函數的參數個數。
$* 傳遞給腳本或函數的所有參數。
$@ 傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$? 上個命令的退出狀態,或函數的返回值。
$$ 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID。
 
變量替換運算符
${varname:-word} 如果varname的值存在且非null,返回varname的值;未定義,則輸出為word(用於未定義變量返回默認值)
${varname:=word} 如果varname的值在且非null,返回varname的值;未定義,則輸出為word,並且varname被設置為word(用於未定義變量設置默認變量)
${varname:?message} 如果varname的值在且非null,返回varname的值;未定義,則輸出為varname:undefined!,然后退出;如果省略message這種提示消息,則返回parameter null or not set (用於未定義變量而導致的錯誤)
${varname:+1} 如果varname的值在且非null,則返回1;未定義返回null(用於測試變量存在)
以上每個冒號都是可選的,如果省略冒號,則將每個定義中的存在且非NULL改為存在,就是變量運算符只判斷變量是否存在
 
模式匹配運算符
假設path=/home/prince/desktop/long.file.name
從開頭刪除匹配值
${varname#pattern} 從變量值開頭匹配刪除 # 后最短匹配的部分 
${path#/*/}輸出就是prince/desktop/long.file.name
${varname##pattern} 從變量值開頭匹配刪除 # 后最長匹配的部分 
${path##/*/}輸出就是long.file.name
從結尾刪除匹配值
${varname%pattern} 從變量值尾部匹配刪除 % 后最短匹配的部分 
${path%.*}輸出就是/home/prince/desktop/long.file
${varname%%pattern} 從變量值尾部匹配刪除 % 后最長匹配的部分 
${path%%.*}輸出就是/home/prince/desktop/long
替換匹配值
${varname/pattern/string}從變量值開頭匹配遇到的第一部分pattern替換成string
${path/prince/ollir}輸出就是/home/ollir/desktop/long.file.name
${varname//pattern/string}從變量值開頭匹配遇到的所有pattern替換成string
 
定義數組
在Shell中,用括號來表示數組,數組元素用“空格”符號分割開。定義數組的一般形式為:
array_name=(value0 value1 value2 value3)
或者
array_name=( 
value0 
value1 
value2 
value3
 )
單獨定義數組的各個分量:
  1. array_name[0]=value0
  2. array_name[1]=value1
  3. array_name[2]=value2

讀取數組

讀取數組元素值的一般格式是:
  ${array_name[index]}
#!/bin/sh
NAME[0]="Zara" 
NAME[1]="Qadir" 
NAME[2]="Mahnaz" 
NAME[3]="Ayan" 
NAME[4]="Daisy" 
echo "First Index: ${NAME[0]}" 
echo "Second Index: ${NAME[1]}"
輸出
First Index: Zara 
Second Index: Qadir
使用@ 或 * 可以獲取數組中的所有元素:
${array_name[*]}
${array_name[@]}
# 取得數組元素的個數 
length=${#array_name[@]} 
# 或者
 length=${#array_name[*]} 
# 取得數組單個元素的長度 
lengthn=${#array_name[n]}
 
參考:http://c.biancheng.net/cpp/view/7006.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM