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

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

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!\n" # -echo 開啓轉義,\n換行,輸入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` 顯示當前日期bash

 

#!/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
##################################################################################it

#!/bin/bash
#顯示普通字符串
echo "It is a test";
#顯示轉義字符
echo "\"It is a test\"";
#顯示變量(等待用戶輸入)
read name
echo "$name It is a test";
#顯示換行 -e表明的開啓轉義,\n表示換行
echo -e "OK!\n" ;
echo "It is a test";
#顯示不換行,\c表示不換行
echo -e "OK! \c";
echo "This is a test";
#原樣輸出,不進行轉義或取變量
echo '$name\"';
#顯示命令的執行結果
echo `date`;test

相關文章
相關標籤/搜索