【Linux學習010】算數運算、文件測試、字符測試、位置變量和特殊變量

一、算術運算

    Bash中的算術運算方法有一下幾種:

    1.使用let命令

kdyzm@kdyzm:~$ let A=1+2
kdyzm@kdyzm:~$ echo $A
3
kdyzm@kdyzm:~$

    2.$[expression]

kdyzm@kdyzm:~$ A=$[1+2]
kdyzm@kdyzm:~$ echo $A
3
kdyzm@kdyzm:~$

    3.$((expression))

kdyzm@kdyzm:~$ B=$((1+2))
kdyzm@kdyzm:~$ echo $B
3
kdyzm@kdyzm:~$

    4.使用expr命令

kdyzm@kdyzm:~$ expr 1+2
1+2
kdyzm@kdyzm:~$ expr 1 + 2
3
kdyzm@kdyzm:~$

    上面的運算結果顯示使用expr表達式需要注意操作符兩側必須帶有空格,否則被識別爲字符串類型。

二、文件測試

    文件測試也是使用test命令,同樣可以簡寫成爲[expression]

test
        -b    FILE:文件存在而且是塊設備文件
        -c    FILE:文件存在而且是字符設備文件
        -d    FILE:文件存在而且是目錄
        -e    FILE:文件存在
        -f    FILE:文件存在而且是一個普通文件
        -h|-L    FILE:文件存在而且是一個鏈接文件
        -p    FILE:文件存在而且是一個命名管道文件
        -S    FILE:文件存在而且是一個套接字文件
        -s    FILE:文件存在而且大小不爲0
        -r    FILE:文件存在而且可讀(當前用戶)
        -w    FILE:文件存在而且可寫(當前用戶)
        -x    FILE:文件存在而且可執行(當前用戶)

三、字符測試

    字符測試是使用test命令,同樣可以簡寫成爲[expression]

test
        -n    STRING:字符串長度不爲0
        -z    STRING:字符串長度爲0
        STRING1 = STRING2    :兩個字符串相同
        STRING1 != STRING2    :兩個字符串不相同

四、位置變量與特殊變量

    1.特殊變量

$?    :命令執行狀態結果,0表示成功,1-255表示失敗
$#    :參數的個數
$*    :參數列表
$@    :參數列表

    2.位置變量

        bash中使用位置變量能夠直接引用命令參數,$1表示第一個參數,$2表示第二個參數,,,,,

    3.使用shift命令

shift

        shift命令能夠“刪除”掉參數列表中的第一個參數,使得是使用$1訪問原來參數列表中的第二個參數。

        多次使用shift命令的結果以此類推。 

五、雜項

    1.自定義退出碼

    exit n

        使用exit能夠退出腳本,如果只是單獨的使用一個exit命令,,沒有定義退出碼,使用最後執行的一條命令的執行狀態結果作爲退出碼。

    2.使用bash命令檢測腳本文件是否有語法錯誤

bash -n FILE    :檢測腳本穩健是否有語法錯誤
bash -x FILE    :單步執行,將每一步的執行過程打印到屏幕

六、練習

    1.寫一個腳本,能夠接收一個參數,判斷該參數是否是一個文件,如果是,則打印文件類型,否則提示文件不存在。

#!/bin/bash

if [ -e $1 ];then
        file $1
else
        echo "No such file !"
fi

    2.寫一個腳本,給該腳本傳遞兩個參數,顯示兩個數的和與乘積,如果參數不夠則進行提示並退出。

#!/bin/bash

if [ $# -lt 2 ];then
        echo "USAGE : test4.sh ARG1 ARG2"
        exit 1
fi
echo "$1+$2=$[$1+$2]"
echo "$1*$2=$[$1*$2]"

    3.傳遞三個參數給腳本,第一個數是整數,第二個是操作符,第三個數是整數,將計算結果計算出來顯示在屏幕上。

#!/bin/bash
echo $@

if [ $# -lt 3 ] ;then
        echo "USAGE : calculate.sh VAR1 OPERATOR VAR2"
        exit 1
fi
VAR1=$1
OP=$2
VAR2=$3
if [ $OP = '+' ];then
        echo "$VAR1+$VAR2=$[$VAR1+$VAR2]"
        exit 0
elif [ $OP = '-' ];then
        echo "$VAR1-$VAR2=$[$VAR1-$VAR2]"
        exit 0
elif [ $OP = '*' ];then
        echo "$VAR1*$VAR2=$[$VAR1*$VAR2]"
        exit 0
elif [ $OP = '/' ];then
        echo "$VAR1/$VAR2=$[$VAR1/$VAR2]"
        exit 0
else
        echo "The Operator must be +-*/"
        exit 1
fi

    這裏還有一個非常重要的問題需要注意,在運行該命令的時候,輸入形式應當如下所示:        

kdyzm@kdyzm:~/scripts$ ./calculate.sh 2 '\*' 3
2 \* 3
The Operator must be +-*/
kdyzm@kdyzm:~/scripts$

    首先,操作符必須使用''括起來,同時,需要用反斜線轉義操作符:

+ -> '\+'
- -> '\-'
* -> '\*'
/ -> '\/'

    這麼做是有原因的,特別是*符號,它有在bash中有特殊的含義,使用

echo 2 * 3

    命令,將會顯示如下結果:

kdyzm@kdyzm:~$ echo 2 * 3
2 a.txt b.txt datastructure Desktop Documents Downloads examples.desktop Music Pictures ProgramFiles Public scripts SoftWare Templates Untitled Document Untitled Document~ Videos 3
kdyzm@kdyzm:~$

    * 在這裏會被bash解析成“顯示所有文件”的意思,所以必須對其進行轉義,使用'\'進行轉義,但是僅僅這樣還不夠,必須得加上''表示強引用才行,否則的話還是會被解析;這裏使用echo $@命令查看參數列表。

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章