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
发布了32 篇原创文章 · 获赞 7 · 访问量 7753

猜你喜欢

转载自blog.csdn.net/adim__/article/details/105121863