[命令] Linux 命令 (()) (比较数值、比较字符串和数值运算)

内容一:(()) 比较符号

1.1 (()) 数值比较符号和运算符号

1) ==,若两个数值存在且相等,则结果为真
2) !=,若两个数值存在且不相等,则结果为真
3) >,若两个数值存在且前一个数值大于后一个数值,则结果为真
4) <,若两个数值存在且前一个数值小于后一个数值,则结果为真
5) >=,若两个数值存在且前一个数值大于或等于后一个数值,则结果为真
6) <=,若两个数值存在且前一个数值小于或等于后一个数值,则结果为真
7) + ,加法
8) – ,减法
9) * ,乘法
10) / ,除法
11) % ,求余

1.2 (()) 字符串比较符号

==,若两个字符串存在且一样,则结果为真

内容二:(()) 的数值比较案例

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

# (( 0 -ne 1 ))
# echo $?
0

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

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

# (( a == a ))
# echo $?
0

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

2.3 案例三:对整数进行运算

# a=1
# b=2
# c=$(($a + $b))
# echo $c
3

[命令] 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) <,若两个字符串存在且前一个字符串小于后一个字符串(按数字顺序或字母数顺序进行比较,越靠后的值越大),则结果为真

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) &&,和
2) ||,或
3) !,非

1.5 [[]] 运算符号

1) +,若两个数值存在,则相加
2) -,若两个数值存在,则相减
3) *,若两个数值存在,则相乘
4) /,若两个数值存在,则相除
5) %,若两个数值存在,则取余

1.6 [[]] 其他符号

1) =~,两个字符串或数值存在且后一个字符串或数值匹配正则表达式后一样,则结果为真
2) [0-9] 等所有 Linux 正则表达式
3) * 等所有 Linux 通配符

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

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=2
# b=3
# c=5
# [[ $a+$b -eq $c ]]
# echo $?
0

(补充:这里以测试变量 a 加变量 b 是否等于变量 c 为例)

(注意: [[]] 数值运算后需要使用 -eq、-ne、-gt、-lt、-ge、-le 进行比较而不是使用 ==、!=、>、<、>=、<=)

2.6 案例六:使用逻辑符号对多个变量进行比较

# a=eternalcenter
# b=eternalcenter
# c=eternalcentre
# [[ $a == $b && $b != $c ]]
# echo $?
# 0

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

2.7 案例七:使用通配符对字符串进行比较

# [[ eternalcenter = eternalcen??? ]]
# echo $?
# 0

或者:

# [[ eternalcenter = e*r ]]
# echo $?
# 0

(补充:这里以测试字符串 eternalcenter 是否等于字符串加通配符 eternalcen??? 或字符串加通配符 e*r 为例)

2.8 案例八:使用正则表达式对字符串进行比较

# [[ 10 =~ [0-9]{2} ]]
# echo $?
# 0

(补充:这里以测试数字 10 是否是每位数是 0 到 9 的两位数为例)

[命令] Linux 命令 set (设置 Shell 里的位置变量或者 Shell 的执行方式)

内容一:set 命令的格式

1.1 设置 Shell 的位置变量的格式

# set <Value of the first position variable> <Value of the second location variable> ......

1.2 设置 Shell 的执行方式

# set <parameter>

或者:

# set <parameter> +o

或者:

# set <parameter> -o

(补充:+o 代表打开特殊属性,-o 代表结束特殊属性)

内容二: set 的常用参数

1) -a 将已修改的变量进行标记,为将其输出至环境变量做准备
2) -b 让被中止的后台进程立刻显示退出状态代码
3) -d 取消使用杂凑表记忆中使用过的指令
4) -e 若退出状态代码不为 0 (正常退出)则立即退出,并显示错误原因
5) -f 取消通配符
6) -h 默认自动记录函数位置
7) -k 让命令的参数为此命令的环境变量
8) -l 默认自动记录 for 循环变量名
9) -m 监视模式
10) -n 测试模式(只读取不执行)
11) -p 优先顺序模式
12) -P 让文件或目录代替符号链接
13) -t 让随后的命令执行后立即退出
14) -u 使用未定义的变量时显示错误信息
15) -v 显示输入值
16) -H shell 使用感叹号 “!” + 号码的方式调用 history 命令中的历史命令
17) -x 命令指向前先显示此命令的参数或变量

(补充:将以上参数前面的 – 换成 + 则会变成相反的效果)

[内容] Linux 数组

内容一:定义数组

1.1 定义数组全部的值

1.1.1 在命令行中定义数组的值
# <array_name>=(<value0> <value1> <value2> <value3> <value4>)

或者:

# <array_name>=(\
<value0>\
<value1>\
<value2>\
<value3>\
<value4>\
)
1.1.2 在脚本中定义数组的值
<array_name>=(
<value0>
<value1>
<value2>
<value3>
<value4>
)

或者:

<array_name>[0]=<value0>
<array_name>[1]=<value1>
<array_name>[2]=<value2>
<array_name>[3]=<value3>
<array_name>[4]=<value4>

1.2 定义数组某个指定位置元素的值

1.2.1 在命令行定义数组某个指定位置元素的值
# <array_name>[0]=<value0>

(补充:这里以定义数组第 1 个元素位置的值为例)

1.2.2 在脚本定义数组某个指定位置元素的值
<array_name>[0]=<value0>

(补充:这里以定义数组第 1 个元素位置的值为例)

1.3 给数组追加新的元素

# <array_name>+=(<the value of the new element> <the value of the new element> <the value of the new element> ......)

或者:

# <array_name>+=('<the value of the new element>' '<the value of the new element>' '<the value of the new element>' ......)

(补充:这里每个空格间隔 1 个新的元素,元素的位置依次递增)

内容二:显示数组

2.1 显示数组全部的值

# echo ${<array_name>[*]}

或者:

# echo ${<array_name>[@]}

2.2 显示数组元素的个数

# echo ${#<array_name>[*]}

或者:

# echo ${#<array_name>[@]}

2.3 显示数组最长单个元素的长度

# echo ${#<array_name>[n]}

2.4 显示数组单个元素的值

# echo ${<array_name>[1]}

(补充:这里以显示数组第 2 个元素的值为例)

2.5 显示数组位置经过计算得出的元素的值

# echo ${command_array[2 + 1]} 

(补充:这里以显示数组第 2 + 1 = 3 个,也就是第 3 个元素的值为例)

2.6 显示数组位置经过计算得出的元素的值,并在计算过程中使用变量

# echo ${command_array[(2 * $i) + 1]}

(补充:这里以显示数组第 2 乘以变量 i 的值再加上 1 的位置的元素的值为例)

2.7 显示数组单个元素的值,并在前面加前缀

# echo "First Index: ${<array_name>[0]}"

(补充:这里以显示数组第 1 个元素的值,并在前面加上 First Index: 前缀为例)

内容三:数组的使用案例

3.1 创建使用数组的脚本

# vim test.sh

创建以下内容:

#!/bin/bash
  
NAME[0]='a1'
NAME[1]='b2'
NAME[2]='c3'
NAME[3]='d4'
NAME[4]='e5'

echo "first one: ${NAME[0]}"
echo "${NAME[*]}"

(补充:这里以创建名为 test.sh 显示数组的第 1 个值和所有值,并在第 1 个值前面添加 first one 前缀的脚本为例)

3.2 执行使用数组的脚本

# . test.sh 
first one: a1
all: a1 b2 c3 d4 e5

(补充:这里以执行名为 test.sh 的脚本,显示第 1 行是 first one: a1 第 2 行是 all: a1 b2 c3 d4 e5 的结果为例)

[命令] Linux 命令 echo (显示内容)

内容一:echo 的命令选项

1) -n 输出不换行
2) -e 处理某些特殊字符
\a 蜂鸣声报警
\b 删除前面一个字符
\c 在末尾不换行
\e 输出 esc
\f 换行,同时光标停在原处
\n 换行
\r 不换行,同时光标停在原处
\t tab,水平方向
\v tab,垂直方向
\ 输出 \
\Onnn 输出八进制 ASCII 字符
\xHH 输出十六进制 ASCII 字符
3) -E 不再转义

内容二:echo 的其他显示选项

1) \033[0m 将所有显示属性关闭
2) \033[1m 高亮
3) \033[4m 下划线
4) \033[5m 闪烁
5) \033[7m 反显
6) \033[8m 消隐
7) \033[37m — \33[0m 设置字体颜色,这里以将字体颜色设置为白色为例
8) \033[40m — \33[0m 设置背景颜色,这里以将背景颜色设置为白色为例
9) \033[A 将光标向上移 n 行
10) \033[B 将光标向下移 n 行
11) \033[C 将光标向右移 n 行
12) \033[D 将光标向左移 n 行
13) \033[;H 将光标跳转到 x 和 y 位置
14) \033[2J 清屏
15) \033[K 将光标所在位置到行尾的所有位置全部清除
16) \033[s 将光标位置保存
17) \033[u 将光标位置恢复
18) \033[?25l 将光标隐藏
19) \033[?25h 将光标显示

内容三:echo 显示不同颜色字体的案例

# echo -e "\033[30m black characters \033[0m" 
# echo -e "\033[31m red characters \033[0m"
# echo -e "\033[32m green characters \033[0m" 
# echo -e "\033[33m yellow characters \033[0m"
# echo -e "\033[34m blue characters \033[0m"
# echo -e "\033[35m purple character \033[0m"
# echo -e "\033[36m sky blue character \033[0m"
# echo -e "\033[37m white character \033[0m"

内容四:echo 显示不同颜色背景的案例

# echo -e "\033[40;37m white characters on black background \033[0m"
# echo -e "\033[41;37m white characters on red background \033[0m"
# echo -e "\033[42;37m white characters on green background \033[0m"
# echo -e "\033[43;37m white characters on yellow background \033[0m"
# echo -e "\033[44;37m white characters on blue background \033[0m"
# echo -e "\033[45;37m white characters on purple background \033[0m"
# echo -e "\033[46;37m white characters on sky blue background \033[0m"
# echo -e "\033[47;30m black characters on white background \033[0m"

内容五:echo 的其他案例

5.1 案例一:不换行带 tab 输出

# for month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec;do echo -e "$month\t\c";done
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

(补充:这里以不换行带 tab 输出 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 为例)

5.2 案例二:先清屏再不换行输出

# echo -e "\033[2J\033[10A\Eternal Center\c"

(补充:这里以先清屏再不换行输出 Eternal Center 为例)