【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 $@命令查看参数列表。

    


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