Shell之師徒西天取經---第二天之數組

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

 

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