[内容] Linux 变量默认值

English

内容一:在命令行给变量设置默认值

1.1 给两个普通变量赋值

# a=1
# b=

(补充:这里以让 a 是 1,b 为空值为例)

1.2 在命令行给变量设置默认值

# var1=${a:-no}
# var2=${b:-no}


补充:
1) 如果 a 是空值,则 var1 是 no,否则 var1 等于 a
2) 如果 b 是空值,则 var2 是 no,否则 var2 等于 b

1.3 显示变量结果

# echo $var1
1
# echo $var2
no


补充:
1) a 的值是 1,所以 var1 是 1
2) b 的是空值,所以 var2 是 no

内容二:在脚本中设置变量默认值

2.1 创建设置变量默认值的脚本

# vim var_default.sh

创建以下内容:

#!/bin/bash
var_default="${1:-no}"
echo $var_default

(补充:这里以如果 $1 的变量是空值,则 var_default 是 no,否则 var_default 等于 $1,并显示出来为例)

2.2 测试设置变量默认值的脚本

# bash var_default.sh
no
# bash var_default.sh 1
1
# bash var_default.sh 2
2
# bash var_default.sh 3
3

[内容] Linux 退出状态代码 (转载)

Linux Shell学习笔记:exit退出状态代码

inux提供$?特殊变量来保存最后一条命令执行结束的退出状态。执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值。

正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令执行有错。

该命令可以用于检查命令是否正确执行,比如在解压包的时候,检查解压包是否成功十分有效。

 

自定义退出状态码,可以在脚本中定义自己的退出状态代码,然后使用echo $?检查。

退出状态码最高是255,一般自定义的代码值为0~255,如果超出255,则返回该数值被256除了之后的余数。

 

 

退出状态代码:

0 命令成功完成

1通常的未知错误

2误用shell命令

126命令无法执行

127没有找到命令

128无效的退出参数

128+x使用Linux信号x的致命错误。

130使用Ctrl-C终止的命令

255规范外的退出状态

ubuntu下测试结果如下

    wl@wl-MS-7673:/home/python$ date
     
    2013年 11月 14日 星期四 19:12:45 CST
     
    wl@wl-MS-7673:/home/python$ echo $?
     
    0
     
    wl@wl-MS-7673:/home/python$ kkllk
     
    kkllk: command not found
     
    wl@wl-MS-7673:/home/python$ echo $?
     
    127
     
    wl@wl-MS-7673:/home/python$ ls
     
    hello.py hello.py~
     
    wl@wl-MS-7673:/home/python$ vim a.c
     
    wl@wl-MS-7673:/home/python$ ls
     
    hello.py hello.py~
     
    wl@wl-MS-7673:/home/python$ gedit a.c
     
    wl@wl-MS-7673:/home/python$ ./hello.py
     
    bash: ./hello.py: 权限不够
     
    wl@wl-MS-7673:/home/python$ echo $?
     
    126
     
    wl@wl-MS-7673:/home/python$ date %t
     
    date: 无效的日期"%t"
     
    wl@wl-MS-7673:/home/python$ echo $?
     
    1
     
    wl@wl-MS-7673:/home/python$


 

    root@wl-MS-7673:~# ls -sail test
     
    790207 4 -rwxr--r-- 1 root root 30 11月 14 19:25 test
     
    root@wl-MS-7673:~# ./test
     
    root@wl-MS-7673:~# echo $?
     
    44
     
    root@wl-MS-7673:~# cat test
     
    #!/bin/bash
     
    var=300
     
    exit $var
     
    root@wl-MS-7673:~#

————————————————
版权声明:本文为CSDN博主「ChasingdreamLY」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26591517/article/details/82492829

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z

[命令] Linux 命令 [] (比较数值、文件、目录、链接、块、特殊文件、字符串)

内容一:[] 比较符号

1.1 [] 数值比较符号

1) -eq 或者 ==,若两个数值存在且相等,则结果为真
2) -ne 或者 !=,若两个数值存在且不相等,则结果为真
3) -gt 或者 >,若两个数值存在且前一个数值大于后一个数值,则结果为真
4) -lt 或者 <,若两个数值存在且前一个数值小于后一个数值,则结果为真
5) -ge 或者 >=,若两个数值存在且前一个数值大于或等于后一个数值,则结果为真
6) -le 或者 <=,若两个数值存在且前一个数值小于或等于后一个数值,则结果为真

1.2 [] 字符串比较符号

1) -z,如果字符串为空值,则结果为真
2) -n,如果字符串不为空值,则结果为真
3) == 或者 =,若两个字符串存在且一样,则结果为真
4) !=,若两个字符串存在且不一样,则结果为真
5) >,若两个字符串存在且前一个字符串大于后一个字符串(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真
6) <,若两个字符串存在且前一个字符串小于后一个字符串(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真
7) >,若两个字符串存在且前一个字符串的 ASCII 码大于后一个字符串的 ASCII 码(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真
8) \<,若两个字符串存在且前一个字符串的 ASCII 码大于后一个字符串的 ASCII 码(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真

1.3 [] 文件、目录、链接、块、特殊文件比较符号

1) -e,若文件或目录或链接存在,则结果为真
2) -d,若目录存在,则结果为真
3) -f,若文件存在,则结果为真
4) -L,若链接存在,则结果为真
5) -b,若块文件存在,则结果为真
6) -c,若字符型特殊文件存在,则结果为真
7) -s,若文件存在且里面有内容,则结果为真
8) -r,若文件且可读,则结果为真
9) -w,若文件且可写,则结果为真
10) -x,若文件且可执行,则结果为真
11) -nt,若两个文件存在且前一个文件比后一个文件新,则结果为真
12) -ot,若两个文件存在且前一个文件比后一个文件新,则结果为真

1.4 [] 逻辑符号

1) -a,和
2) -o,或
3) !,非

内容二:[] 的数值比较案例

2.1 案例一:对整数进行比较

# [ 0 -ne 1 ]
# echo $?
0

(补充:这里以测试数字 0 是否不等于数字 1 为例)

2.2 案例二:对字符串进行比较

# [ a == a ]
# echo $?
0

(补充:这里以测试字符串 a 是否等于字符串 a 为例)

2.3 案例三:对文件进行比较

# [ -f test.txt ]
# echo $?
0

(补充:这里以测试文件 test.txt 是否存在为例)

2.4 案例四:对变量进行比较

# a=1
# [ $a == 1 ]
# echo $?
0

(补充:这里以测试变量 a 是否等于数字 1 为例)

2.5 案例五:对变量进行比较并且同时使用逻辑符号

# a=1
# b=2
# c=1
# [ $a == $c -a $b == 2 ]
# echo $?
0

(补充:这里以测试变量 a 是否等于变量 c 并且变量 b 是否等于数字 2 为例)

2.6 案例六:对命令结果进行比较

# [ "`ls /tmp`" != "" ]
# echo $?
# 0

(补充:这里以测试 ls /tmp 命令的运行结果是否存在为例)

[命令] Linux 命令 test (比较数值、文件、目录、链接、块、特殊文件、字符串)

内容一:test 比较符号

1.1 test 数值比较符号

1) -eq 或者 ==,若两个数值存在且相等,则结果为真
2) -ne 或者 !=,若两个数值存在且不相等,则结果为真
3) -gt 或者 >,若两个数值存在且前一个数值大于后一个数值,则结果为真
4) -lt 或者 <,若两个数值存在且前一个数值小于后一个数值,则结果为真
5) -ge 或者 >=,若两个数值存在且前一个数值大于或等于后一个数值,则结果为真
6) -le 或者 <=,若两个数值存在且前一个数值小于或等于后一个数值,则结果为真

1.2 test 字符串比较符号

1) -z,如果字符串为空值,则结果为真
2) -n,如果字符串不为空值,则结果为真
3) == 或者 =,若两个字符串存在且一样,则结果为真
4) !=,若两个字符串存在且不一样,则结果为真
5) >,若两个字符串存在且前一个字符串大于后一个字符串(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真
6) <,若两个字符串存在且前一个字符串小于后一个字符串(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真

1.3 test 文件、目录、链接、块、特殊文件比较符号

1) -e,若文件或目录或链接存在,则结果为真
2) -d,若目录存在,则结果为真
3) -f,若文件存在,则结果为真
4) -L,若链接存在,则结果为真
5) -b,若块文件存在,则结果为真
6) -c,若字符型特殊文件存在,则结果为真
7) -s,若文件存在且里面有内容,则结果为真
8) -r,若文件且可读,则结果为真
9) -w,若文件且可写,则结果为真
10) -x,若文件且可执行,则结果为真
11) -nt,若两个文件存在且前一个文件比后一个文件新,则结果为真
12) -ot,若两个文件存在且前一个文件比后一个文件新,则结果为真

内容二:test 的数值比较案例

2.1 案例一:对整数进行比较

# test 0 -ne 1
# echo $?
0

(补充:这里以测试数字 0 是否不等于数字 1 为例)

2.2 案例二:对字符串进行比较

# test a == a
# echo $?
0

(补充:这里以测试字符串 a 是否等于字符串 a 为例)

2.3 案例三:对文件进行比较

# test -f test.txt
# echo $?
0

(补充:这里以测试文件 test.txt 是否存在为例)

2.4 案例四:对变量进行比较

# a=1
# test $a == 1
# echo $?
0

(补充:这里以测试变量 a 是否等于数字 1 为例)

[内容] Linux 空值的判断

案例一:

#!/bin/bash
var=
if [ ! -n "$var" ]; then
  echo "NULL"
else
  echo "NOT NULL"
fi

案例二:

#!/bin/bash
var=
if [ ! "$var" ]; then
  echo "NULL"
else
  echo "NOT NULL"
fi

案例三:

#!/bin/sh 
var=
if [ "$var" = "" ]
then
  echo "NULL"
else  
  echo "NOT NULL"
fi

案例四:

#!/bin/sh
var=
if test -z "$var"
then
  echo "NULL"
else  
  echo "NOT NULL"
fi