[命令] 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 为例)

[娱乐] Shell 菜单

介绍

基本信息

作者:朱明宇
名称:菜单
作用:提供一个可以供用户进行选择的菜单

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本

脚本

#!/bin/bash

while true
do
        echo
        echo '====== Optional Item ======'
        echo '1.choose CentOS'
        echo '2.choose RHEL'
        echo '3.choose openSUSE'
        echo '4.choose SUSE'
        echo '*.Enter other keys to exit'
        echo
        read -p 'Which one do you want to choose ? ' choose

        case $choose in
        1)
                echo
                echo
                echo '=========  Result ========='
                echo 'You have choosed CentOS'
                echo ;;
        2)
                echo
                echo
                echo '=========  Result ========='
                echo 'You have choosed RHEL'
                echo ;;
        3)
                echo
                echo
                echo '=========  Result ========='
                echo 'You have choosed openSUSE'
                echo ;;
        4)
                echo
                echo
                echo '=========  Result ========='
                echo 'You have choosed SUSE'
                echo ;;
        *)
                exit 1 ;;
        esac
done

[内容] 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

[内容] Linux for 循环

内容一:Linux for 循环的格式

for <variable> in <list>
do
<command>
done

内容二:Linux for 循环的使用案例

2.1 案例一:以名称作为循环条件

# for i in host1 host2 host3; do echo $i; done
host1
host2
host3

(补充:这里以 host1、host2、host3 三个名称作为循环条件为例)

2.2 案例二:以数组中的元素作为循环条件

# for i in {host1,host2,host3}; do echo $i; done
host1
host2
host3

(补充:这里以 host1、host2、host3 三个名称作为循环条件为例)

2.3 案例三:以名称和正则表达式的组合作为循环条件

# for i in host{1..3}; do echo $i; done
host1
host2
host3

(补充:这里以 host1、host2、host3 三个名称作为循环条件,并且通过通佩符进行了缩写为例)

2.4 案例四:以当前目录下的文件名,并以名称和通佩符的组合作为循环条件

# for i in *.txt ;do ls $i; done
a.txt
b.txt
c.txt

(补充:这里以所有以 txt 结尾的文件作为循环条件为例)

2.5 案例五:以当前目录下名称和正则表达式的组合文件名作为循环条件

# for i in {a..c}.txt; do ls $i; done
a.txt
b.txt
c.txt

(补充:这里以所有以 txt 结尾的文件作为循环条件为例,并且通过通佩符进行了缩写为例)

2.6 案例六:以连续数字作为循环条件

2.6.1 以连续数字作为循环条件
# for i in 1 2 3 4 5 6 7 8 9 10;do echo $i;done
1
2
3
4
5
6
7
8
9
10

或者:

# for((i=0;i<=10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9
10
2.6.2 以 seq 命令生成的数字作为循环条件
# for i in `seq 1 10`; do echo $i; done
1
2
3
4
5
6
7
8
9
10

(补充:这里以 seq 1 10 命令的运行结果 1 到 10 作为循环条件为例)

2.6.3 以 seq 命令生成的数字作为循环条件 (使用变量)
# start=1 ; end=10
# for i in `seq $start $end`; do echo $i; done
1
2
3
4
5
6
7
8
9
10

(补充:这里以 seq 1 10 命令的运行结果 1 到 10 作为循环条件为例)

2.6.4 以连续符号命令生成的数字作为循环条件
# for i in {1..10} ; do echo $i; done
1
2
3
4
5
6
7
8
9
10

(补充:这里以 {1..10} 符号命令的运行结果 1 到 10 作为循环条件为例)

2.7 案例七:以等差数列作为循环条件

# for i in `seq 6 2 12`; do echo $i; done
6
8
10
12

(补充:这里以 seq 6 2 12 命令的运行结果 6 到 12 里的等差是 2 的等差数列作为循环条件为例)

2.8 案例八:以命令的运行结果作为循环条件

# for i in `cat user.list`; do echo $i; done
Tom
Natasha

(补充:这里以 cat user.list 命令的运行结果 user.list 文件里的内容作为循环条件为例)

2.9 案例九:多个循环条件

> for i in {1..4}.{1..4}; do echo $i; done
1.1
1.2
1.3
1.4
2.1
2.2
2.3
2.4
3.1
3.2
3.3
3.4
4.1
4.2
4.3
4.4

(补充:这里以 {1..4}.{1..4} 命令的运行结果 1.1 到 4.4 作为循环条件为例)