Shell自學之運算子和echo(W3C)

我想回家發表於2018-04-15

上面理論知識,最下面有我做的測試的例子:

10.Shell運算子
expr是一款表示式計算工具,使用它能完成表示式的求值操作
例:val=`expr 2 + 2`;echo “${val}”

注意:
表示式和運算子之間要有空格,2+2是錯誤的,2 + 2是正確的
完整的表示式要被“包含

A.算術運算子(假定兩個變數a為10,b為20)
+ : `expr $a + $b` 結果為30
– : `expr $a – $b` 結果為-10
* : `expr $a * $b` 結果為200 乘號(*)前邊必須加反斜槓()才能實現乘法運算
/ : `expr $b / $a` 結果為2
% : `expr $b % $a` 結果為0
= : a=$b 把變數b的值賦給a
==: [ $a == $b ] 返回false (暫時不會用,只知道可以用來判斷)
!=: [ $a != $b ] 返回true
if判斷:
if [ $a == $b ]
then
echo “a 等於 b”
else
echo “a 不等於 b”
fi
注意條件表示式必須要放在方括號之間,並且要有空格
B.關係運算子($a為10,$b為20)
-eq : [ $a -eq $b ] 返回false,檢查相等,相等返回true
-ne : [ $a -ne $b ] 返回true,檢查相等,不相等返回true
-gt : [ $a -gt $b ] 返回false,檢查左邊的數是否大於右邊的數
-lt : [ $a -lt $b ] 返回true,檢查左邊的數是否小於右邊的數
-ge : [ $a -ge $b ] 返回false,檢測左邊的數是否大於等於右邊的
-le : [ $a -le $b ] 返回true,檢測左邊的數是否小於等於右邊的
C.布林運算子
! : [ !false ] 返回true,非運算
-o : [ $a -lt 20 -o $b -gt 100] 返回true,或運算
-a : [ $a -lt 20 -o $b -gt 100] 返回false,與運算
D:邏輯運算子
&& : [[ $a -lt 100 && $b -gt 100 ]] 返回 false,邏輯與
|| : [[ $a -lt 100 || $b -gt 100 ]] 返回 true,邏輯或
E.字串運算子(a為”abc”,b為”efg”)
= : [ $a = $b ] 返回false,檢查兩個字串是否相等,相等返回true
!= : [ $a != $b ] 返回 true,檢查兩個字串是否相等,不相等返回true
-z : [ -z $a ] 返回 false,檢測字串長度是否為0,為0時返回true
-n : [ -n $a ] 返回 true,檢測字串長度是否為0,不為0時返回true
str : [ $a ] 返回 true,檢測字串是否為空,不為空返回true

F.檔案測試運算子(暫時用不到,以後用到再看)
-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。
11.echo命令:
A:顯示普通字串
echo “It is a test”
echo It is a test
B:顯示轉義字元
echo “”It is a test”” 結果為:”It is a test”
C:顯示變數
read命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給shell變數
例子(.sh指令碼):
read name
echo “$name It is a test”
執行後(等待輸入):
OK #標準輸入
OK It is a test #輸出
D:顯示換行
echo -e “OK!
” # -echo 開啟轉義,
換行,輸入OK之後換行
E:顯示不換行
echo -e “OK! c” # -echo 開啟轉義,c不換行,輸入OK之後不換行
echo “It is a test”
結果為:OK! It is a test
F:顯示結果定向至檔案
echo “It is s test” > myfile
echo “It is s test” >> myfile
G:原樣輸出字串,不進行轉義或取變數(用單引號)
echo `$name”` 結果為:$name”
H:顯示命令的執行結果
echo `date` 顯示當前日期

 

#!/bin/bash
a=10;
b=20;

echo “a + b = ” `expr $a + $b`;
echo “a – b = ” `expr $a – $b`;
echo “a / b = ” `expr $a / $b`;
echo “b / a = ” `expr $b / $a`;
# 記住乘法要轉義,前面加個
echo “a * b = ” `expr $b * $a`;
echo “a % b = ” `expr $b % $a`;
c=$a;
echo “c = $c”;
# 判斷等於與不等於
if [ $a == $b ]
then
echo “$a == $b : a 等於 b”
fi
if [ $a != $b ]
then
echo “$a != $b : a 不等於 b”
fi
# if—else—判斷
if [ $a != b ]
then
echo “$a != $b : a 不等於 b “
else
echo “$a == $b : a 等於 b “
fi
# 這個輸不出?疑惑點
# echo “a == b : [ $a == $b ]”;
# echo “a != b : [ $a != $b ]”;
if [ $a -eq $b ]
then
echo “$a -eq $b : a 等於 b”;
else
echo “$a -eq $b : a 不等於 b”;
fi
if [ $a -ne $b ]
then
echo “$a -ne $b : a 不等於 b”;
else
echo “$a -ne $b : a 等於 b”;
fi
# gt和ge是大於和大於等於
if [ $a -gt $b ]
then
echo “$a -gt $b : a 大於 b”;
else
echo “$a -gt $b : a 小於 b”;
fi
# lt和le是小於和小於等於
if [ $a -lt $b ]
then
echo “$a -lt $b : a 小於 b”;
else
echo “$a -lt $b : a 大於 b”;
fi
##################################################################################
#!/bin/bash
#布林運算子
echo “布林運算子:”

a=10;
b=20;
echo “-o表示或,有一個為真結果為真”
if [ $a -gt 100 -o $b -lt 100 ]
then
echo “$a -gt 100 -o $b -lt 100 : 返回true”;
else
echo “$a -gt 100 -o $b -lt 100 : 返回false”;
fi
echo “-a表示與,全為真時才為真”
if [ $a -lt 100 -a $b -lt 100 ]
then
echo “$a -lt 100 -a $b -lt 100 : 返回true”;
else
echo “$a -lt 100 -a $b -lt 100 : 返回false”;
fi

#邏輯運算子,自我感覺與-o和-a沒區別
echo “邏輯運算子”;
#記住格式:只有下面是正確的,有以下兩種錯誤寫法
#[ [ $a -lt 100 && $b -gt 100 ] ];第一個括號和第二個括號間不要空格
#[ $a -lt 100 && $b -gt 100 ];不加括號也是錯的
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo “$a -lt 100 && $b -gt 100 : 結果為true”;
else
echo “$a -lt 100 && $b -gt 100 : 結果為false”;
fi
if [[ $a -lt 100 || $b -lt 100 ]]
then
echo “$a -lt 100 || $b -lt 100 : 結果為true”;
else
echo “$a -lt 100 || $b -lt 100 : 結果為false”;
fi
####################################################################################
#!/bin/bash
#測試字串運算子
echo “字串運算子:”;
a=”abc”;
b=”def”;
echo “= 檢測兩個字串是否相等 : “
if [ a = b ]
then
echo ” $a = $b 的結果為 : true”;
else
echo ” $a = $b 的結果為 : false”;
fi
echo “!= 檢查兩個字串不相等:”
if [ $a != $b ]
then
echo ” $a != $b 的結果為 : true”;
else
echo ” $a != $b 的結果為 : false”;
fi
echo “-z 檢查字串的長度是否為0 : “;
if [ -z $a ]
then
echo “$a 的字串長度為 0 “;
else
echo “$a 的字串長度不為 0 “;
fi
echo “-n 檢查字串的長度不為0 : “;
if [ -n $b ]
then
echo “$b 的字串長度不為0 “;
else
echo “$b 的字串長度為0 “;
fi
echo “str 檢查字串是否為空,不為空返回true(沒看懂) : “;
if [ $a ]
then
echo “$a 不為空”;
else
echo “$a 為空”;
fi
##################################################################################

#!/bin/bash
#顯示普通字串
echo “It is a test”;
#顯示轉義字元
echo “”It is a test””;
#顯示變數(等待使用者輸入)
read name
echo “$name It is a test”;
#顯示換行 -e代表的開啟轉義,
表示換行
echo -e “OK!
” ;
echo “It is a test”;
#顯示不換行,c表示不換行
echo -e “OK! c”;
echo “This is a test”;
#原樣輸出,不進行轉義或取變數
echo `$name”`;
#顯示命令的執行結果
echo `date`;

 

相關文章