1、shell數組的定義以及使用
#!/bin/bash
echo "----------------Shell 數組-----------------"
# shell數組定義形式array_name=(value1 value2 . . . . . . valuen);讀取數組元素array_name[index](index爲數組下標)
:<<EOF
定義數組有兩種形式my_array={value1 value2 . . . . . . valuen}
my_array={value1
value2
value3
.
.
valuen
}
EOF
my_array=(A
B
"C"
D
) # 定義數組兩個元素之間用空格隔開,不能寫逗號
echo "--------輸出每一個數組元素----------"
echo "數組第一個元素:${my_array[0]}"
echo "數組第一個元素:${my_array[1]}"
echo "數組第一個元素:${my_array[2]}"
echo "數組第一個元素:${my_array[3]}"
echo "--------輸出數組中所有的元素--------"
echo "數組元素爲:${my_array[*]}"
echo "數組元素爲:${my_array[@]}"
echo "--------獲取數組的長度-------------"
echo "數組元素的長度爲:${#my_array[*]}"
echo "數組元素的長度爲:${#my_array[@]}"
2、shell運算符
#!/bin/bash
echo "-----------------Shell運算符------------------"
:<<EOF
Shell關係運算符有:算數運算符、關係運算符、布爾運算符、字符串運算符、文件測試運算符
主要通過awk、expr。常用expr運算
EOF
echo "-------------算術運算符---------------"
val=`expr 2 + 2` #注意表達式和運算符之間有空格 '`'爲ESC鍵下面的鍵
echo "兩數之和爲:${val} \n"
a=10 # 定義局部變量
b=20 # 定義局部變量
add_val=`expr ${a} + ${b}` # 加法
echo "a + b的和爲:${add_val}" # a + b 的和爲:30
sub_val=`expr ${a} - ${b}` # 減法
echo "a - b的差爲:${sub_var}" # a - b 的差爲:30
mul_val=`expr ${a} \* ${b}` # 乘法
echo "a * b的積爲:${mul_val}" # a * b 的積爲:30
div_val=`expr ${b} / ${a}` # 除法
echo "b / a的商爲:${div_val}" # a / b 的商爲:30
cmp_val=`expr ${b} % ${a}` # 取餘
echo "b % a的餘數爲:${cmp_val}" # b % a 的餘數爲:30
echo "-----------shell判斷是兩個數是否相等----------------"
if [ ${a} == ${b} ] # 判斷兩個數相等
then
echo "a等於b"
fi
if [ ${a} != ${b} ] # 判斷兩個數不想等
then
echo "a不等於b" # a不等於b
fi
:<<EOF
乘號(*)前邊必須加反斜槓(\)才能實現相乘
if...then..fi爲shell的條件語句
EOF
echo "---------------關係運算符----------------"
# 關係運算符只支持數字,不支持字符串,除非字符串是數字
:<<EOF
-eq 檢測兩個數字是否相等,相等返回true,不等返回false
-ne 檢測兩個數是否不想等,不想等返回true,相等返回false
-gt 檢測左邊的數大於右邊的數,如果是,返回true,不是返回true
-lt 檢測左邊的數是否小於右邊的數,如果是,返回true,不是返回false
-ge 檢測左邊的數是否大於等於右邊的數,如果是,返回true,不是返回false
-le 檢測左邊的數是否小於等於右邊的數,如果是,返回true,不是返回false
EOF
echo "---------------案例演示----------------"
# -eq
if [ ${a} -eq ${b} ]
then
echo "${a} -eq ${b} :a等於b"
else
echo "${a} -eq ${b} :a不等於b"
fi
# -ne
if [ ${a} -ne ${b} ]
then
echo "${a} -ne ${b} :a不等於b"
else
echo "${a} -ne ${b} :a等於b"
fi
# -gt
if [ ${a} -gt ${b} ]
then
echo "${a} -gt ${b} :a大於b"
else
echo "${a} -gt ${b} :a不大於b"
fi
# -lt
if [ ${a} -lt ${b} ]
then
echo "${a} -lt ${b} :a小於b"
else
echo "${a} -lt ${b} :a不小於b"
fi
# -ge
if [ ${a} -ge ${b} ]
then
echo "${a} -ge ${b} :a大於或等於b"
else
echo "${a} -eq ${b} :a小於b"
fi
# -le
if [ ${a} -le ${b} ]
then
echo "${a} -le ${b} :a小於或等於b"
else
echo "${a} -le ${b} :a大於b"
fi
echo "----------------布爾運算------------------"
:<<EOF
! 非運算,表達式爲true則返回false,否則返回true
-o 或運算,有一個表達式爲true,則返回true
-a 與運算,兩個表達式都爲true才返回true
EOF
# ! 非運算
if [ ${a} != ${b} ]
then
echo "$a != $b:a不等於b"
else
echo "$a == $b:a等於bif [ ${a} -lt 100 -a $b -gt 15 ]"
fi
# 與運算
if [ ${a} -lt 100 -a ${b} -gt 15 ]
then
echo "$a小於 100 或 $b 大於15: 返回true"
else
echo "$a小於 100 或 $b 大於15: 返回false"
fi
# 或運算
if [ ${a} -lt 100 -o ${b} -gt 100 ]
then
echo "$a小於 100 或 $b 大於100: 返回true"
else
echo "$a小於 100 或 $b 大於100: 返回false"
fi
if [ ${a} -lt 5 -o ${b} -gt 100 ]
then
echo "$a小於 5 或 $b 大於100: 返回true"
else
echo "$a小於 5 或 $b 大於100: 返回false"
fi
echo "--------------邏輯運算-------------------"
:<<EOF
&& 邏輯的and
|| 邏輯的or
EOF
if [[ ${a} -lt 100 && ${b} -gt 100 ]]
then
echo "返回false"
else
echo "返回true"
fi
if [[ ${a} -lt 100 || ${b} -gt 100 ]]
then
echo "返回true"
else
echo "返回false"
fi
echo "-------------字符串運算-------------------"
:<<EOF
# = 檢測兩個字符串是否相等,相等返回true
# != 檢測兩個字符串是否相等,不相等返回true
# -z 檢測字符串的長度是否爲0,爲0返回true
# -n 檢測字符串的長度是否不爲0,不爲0返回true
# $ 檢測字符串是否爲空,不爲空返回true
EOF
c="abcd"
d="efgh"
if [ ${c} = ${d} ]
then
echo "${a} = ${b}:a 等於 b"
else
echo "${a} = ${b}:a 不等於 b"
fi
if [ ${c} != ${d} ]
then
echo "${c} = ${d}:c 不等於 d"
else
echo "${c} = ${d}:c 等於 d"
fi
if [ -z ${c} ]
then
echo "-z ${c}:字符串長度爲0"
else
echo "-z ${c}:字符串的長度不爲0"
fi
if [ -n ${d} ]
then
echo "-n ${d}:字符串長度不爲0"
else
echo "-n ${d}:字符串的長度爲0"
fi
if [ ${c} ]
then
echo "${c}:字符串不爲空"
else
echo "${c}:字符串爲空"
fi
echo "-------------文件測試運算符-------------"
:<<EOF
-b file 檢測文件是否是塊設備文件,如果是,返回true
-c file 檢測文件是否是字符設備文件,如果是,返回true
-d file 檢測文件是否是目錄,如果是,則返回true
-f file 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是返回true,不是返回false
-g file 檢測文件是否設置了SGID位,如果是,返回true,不是返回false
-k file 檢測文件是否設置了粘着位(StickyBit),如果是:返回true,不是:返回false
-p file 檢測文件是否是有名管道,如果是,則返回true,不是,返回false
-u file 檢測文件是否設置了SUID位,如果是:返回true,不是:返回false
-r file 檢測文件是否可讀,如果是:返回true,不是:返回false
-w file 檢測文件是否可寫入,如果是:返回true,不是:返回false
-x file 檢測文件是否是可執行,如果是:返回true,不是:返回false
-s file 檢測文件是否爲空(文件大小是否大於0),不爲空返回true
-e file 檢測文件(包含目錄)是否存在,如果是:返回true,不是:返回false
-S 判斷某文件是否soket
-L 檢測文件是否存在並且是一個符號鏈接
EOF
file="/usr/local/shell/s1.sh"
# 檢測是否可讀
if [ -r ${file} ]
then
echo "文件可讀"
else
echo "文件不可讀"
fi
# 檢測是否可寫
if [ -w ${file} ]
then
echo "文件可寫"
else
echo ”文件不可寫“
fi
# 檢測是否可執行
if [ -x ${file} ]
then
echo "文件可以執行"
else
echo "文件不可以執行"
fi
# 檢測文件是否是普通文件
if [ -f ${file} ]
then
echo "文件爲普通文件"
else
echo "文件爲特殊文件"
fi
# 檢測文件是否是目錄
if [ -d ${file} ]
then
echo "文件不爲空"
else
echo "文件爲空"
fi
# 檢測文件是否存在
if [ -e ${file} ]
then
echo "文件存在"
else
echo "文件不存在"
fi