数组
语法
数组名=(值1 值2 值3…)
初始化数组
有两种方法
1. 方式一
name=("李明" "Andy" "李磊" "james")
echo $name
打印第一个元素
2. 方式二
name=()
name[0]="404"
name[1]="Andy"
name[2]="柚芒子"
name[3]="全班最菜"
echo ${name[0]} ${name[1]}
读取数组
语法结构:${数组名[下标]}
name=("404" "Andy" "柚芒子" "全班最菜")
#输出一个元素
echo ${name[0]}
#输出所有->"@"表示输出所有的数据
echo ${name[@]}
#输出所有->"*"表示输出所有的数据
echo ${name[*]}
数组里面的长度
1.数组长度
语法:${#数组名[@]}
或者: ${#数组名[*]}
name=("404" "Andy" "柚芒子" "全班最菜")
echo ${#name[@]}
echo ${#name[*]}
结果 4
2.数组元素长度
语法:${#数组名[下标]}
name=("404" "Andy" "柚芒子" "全班最菜")
echo ${#name[2]}
结果 3
传递参数
语法定义
./文件名称.sh 参数1 参数2 参数3…
##${0}->表示文件名称
###${1}->表示参数1
###${2}->表示参数2
echo ${0} ${1} ${2}
# 执行脚本代码:
./hello.sh "合理" "哈哈"
结果 ./hello.sh 合理 哈哈
$#:获得脚本输入参数个数
# 脚本内容如下:
echo ${#}
# 执行脚本代码:
./hello.sh "逗你玩" "饿到爆"
结果 2
${*} 显示整个脚本输入参数列表
# 脚本内容如下:
echo ${*}
# 执行脚本代码:
# ./hello.sh "逗你玩" "饿到爆"
结果: 逗你玩 饿到爆
基本运算符
算数运算符
注意:”expr”规定命令
加法
a=8388
b=9688
c=`expr $a + $b`
echo "c的值:$c"
结果:c的值:18076
注意 “是键盘左上角 $a + $b之间要有空格
减法
a=8388
b=9688
c=`expr $a - $b`
echo "c的值:$c"
结果:c的值:-1300
乘法
a=8388
b=9688
c=`expr $a \* $b`
echo "c的值:$c"
结果:c的值:81262944
注意 *要转义一下写成 \*
除法
a=8388
b=9688
c=`expr $b / $a`
echo "c的值:$c"
结果:c的值:1
注意 结果是向下取整
求余
a=8388
b=9688
c=`expr $b % $a`
echo "c的值:$c"
结果:c的值:1300
关系运算符
“-eq”
“-eq”:检测两个数是否相等,当等返回true
eq 就是equal的缩写
a=32
b=34
if [ $a -eq $b ]
then
echo "a等于b"
else
echo "a不等于b"
fi
输出:a不等于b
注意:[ $a -eq $b ] 括号和代码直接有空格
“-ne”
“-ne”:检测两个数是否不相等,不相等返回true
ne 就是not equal的缩写
a=32
b=34
if [ $a -ne $b ]
then
echo "a不等于b"
else
echo "a等于b"
fi
输出:a不等于b
“-gt”
“-gt”:检测左边数是否大于右边数,如果是,返回true
gt 就是greater than的缩写
a=32
b=32
if [ $a -gt $b ]
then
echo "a大于b"
else
echo "a小于等于b"
fi
输出:a小于等于b
“-lt”
“-lt”:检测左边数是否小于右边数,如果是,返回true
lt 就是less than的缩写
a=32
b=32
if [ $a -lt $b ]
then
echo "a小于b"
else
echo "a大于等于b"
fi
输出:a大于等于b
“-ge”
“-ge”:检测左边数是否(大于+等于)右边数,如果是,返回true
ge 就是greater or equal的缩写
a=33
b=32
if [ $a -ge $b ]
then
echo " a大于等于b"
else
echo "a小于b"
fi
输出:a大于等于b
“-le”
“-ne”:检测左边数是否(小于+等于)右边数,如果是,返回true
le 就是less or equal的缩写
a=33
b=32
if [ $a -le $b ]
then
echo " a小于等于b"
else
echo "a大于b"
fi
输出:a大于b
布尔值运算符
- “!”:非运算,表达式为true,返回true,否则返回false
a=100
b=200
if [ $a != $b ]
then
echo "a不等于b"
fi
输出:a不等于b
- “-o”:或运算,有一个表达式为true,则返回true
o or的缩写
a=100
b=200
if [ $a -lt 200 -o $b -gt 200 ]
then
echo "成立"
fi
输出:成立
注意:中括号的个数和运算符直接的空格
- “-a”:与运算,两个表达式为true,则返回true
a and的缩写
a=100
b=200
if [ $a -lt 200 -a $b -gt 200 ]
then
echo "成立"
else
echo "不成立"
fi
输出:不成立
注意:中括号的个数和运算符直接的空格
逻辑运算符
- “&&”:逻辑且->and
a=100
b=200
if [ $a -lt 200 ] && [ $b -gt 200 ]
then
echo "成立"
else
echo "不成立"
fi
输出:不成立
注意:中括号的个数和运算符直接的空格
- “||”:逻辑 OR
a=100
b=200
if [ $a -lt 200 ] || [ $b -gt 200 ]
then
echo "成立"
else
echo "不成立"
fi
输出:成立
注意:中括号的个数和运算符直接的空格
字符运算符
“=”
检测两个字符串(也可以数字)是否相等,如果相等返回true
a="JAR"
b="逗你玩"
if [ $a = $b ]
then
echo "字符串a等于字符串b"
else
echo "字符串a不等于字符串b"
fi
输出:字符串a不等于字符串b
“!=”
检测两个字符串是否相等,如果不相等返回true
a="JAR"
b="逗你玩"
if [ $a != $b ]
then
echo "字符串a不等于字符串b"
else
echo "字符串a等于字符串b"
fi
输出:字符串a不等于字符串b
“-z”
检测字符串长度是否为0,如果是返回true
z 是zero的缩写
a="JAR"
if [ -z $a ]
then
echo "a为空"
else
echo "a不为空"
fi
输出:a不为空
“-n”
检测字符串长度是否为0,如果不是0 返回true
a="JAR"
if [ -n "$a" ]
then
echo "a不为空"
else
echo "a为空"
fi
输出:a不为空
“”
检测字符串是否为空,不为空返回true
a="JAR"
if [ -n ]
then
echo "a不为空"
else
echo "a为空"
fi
输出:a不为空
文件测试运算符
“-d file”
检测文件是不是一个目录,如果是,那么返回true
d是directory的缩写
file="/Users/liyanjun/shell/hello.sh"
if [ -d $file ]
then
echo "是一个目录"
else
echo "不是一个目录"
fi
输出:不是一个目录
“-r file”
检测文件是否可读,如果是,那么返回true
file="/Users/liyanjun/shell/hello.sh"
if [ -r $file ]
then
echo "可读"
else
echo "不可读"
fi
输出:可读
“-w file”
检测文件是否可写,如果是,那么返回true
file="/Users/liyanjun/shell/hello.sh"
if [ -d $file ]
then
echo "可写"
else
echo "不可写"
fi
输出:不是一个目录
“-x file”
检测文件是否是可执行文件,如果是,那么返回true
file="/Users/liyanjun/shell/hello.sh"
if [ -x file ]
then
echo "可执行"
else
echo "不可执行"
fi
输出:可执行
“-x file”
检测文件是否是可执行文件,如果是,那么返回true
file="/Users/liyanjun/shell/hello.sh"
if [ -x file ]
then
echo "可执行"
else
echo "不可执行"
fi
输出:可执行
“-f file”
检测文件是否是一个普通文件(既不是目录,也不是设备文件),如果是,那么返回true
f
file="/Users/liyanjun/shell/hello.sh"
if [ -f file ]
then
echo "普通文件"
else
echo "不是普通文件"
fi
输出:普通文件
“-e file”
检测文件是否存在(包含了:目录和文件),如果是,那么返回true
e exist的缩写
file="/Users/liyanjun/shell/hello.sh"
if [ -e file ]
then
echo "存在"
else
echo "不存在"
fi
输出:存在
流程控制
if
代码结构
a="JAR"
b="逗你玩"
if [ $a = $b ]
then
echo "字符串a等于字符串b"
fi
“if else”语句
a="JAR"
b="逗你玩"
if [ $a = $b ]
then
echo "字符串a等于字符串b"
else
echo "字符串a不等于字符串b"
fi
if-else-if-else”
a="JAR"
b="逗你玩"
if [ $a = $b ]
then
echo "字符串a等于字符串b"
elif [ $a ]
then
echo "字符串a不为空"
else
echo "字符串a不等于字符串b"
fi
“for”循环语句
1.
for name in "JAR" "小白菜" "Andy" "雪夜"
do
echo ${name}
done
2.
names=("JAR" "小白菜" "Andy" "雪夜");
for name in ${names[*]};
do
echo ${name} 是一个;
done
3.读取文件列表
file="/Users/liyanjun/Desktop/*"
for filename in $file
do
echo $filename
done
输出文件下的列表文件
4.嵌套循环
for ((a=1;a<5;a++))
do
echo a = $a
for (( i = 0; i < 10; i++ ));
do
echo i = $i
done
done
“while”循环
1.普通
while(($a<10))
do
echo ${a}
a=`expr $a + 1`
done
2.无限循环
while :
do
echo "1" #statements
done
或者
while true
do
echo "1" #statements
done
case语句
语法结构
语法结构
case 值 in
模式1)
代码
;;
模式2)
代码
;;
模式3)
代码
;;
sac
案例
umber=1
case $number in
1) echo "等于1"
;;
2) echo "等于2"
;;
3) echo "等于3"
;;
esac
for循环 跳出单个循环
for (( i = 0; i < 10; i++ ));
do
if [ $i == 5 ]
then
echo "退出循环"
break;
fi
done
for循环 跳出内部循环
for (( i = 0; i < 5; i++ ));
do
echo "外层循环的值是 ${i} "
for (( j = 0; j < 5; j++ )); do
echo "内层循环的值是 ${j}"
if [ ${j} == 2 ]
then
echo "退出内部循环"
break;
fi
done
done
for循环 跳出外部部循环
# for循环 跳出外部部循环
for (( i = 0; i < 5; i++ ));
do
echo "外层循环的值是 ${i} "
for (( j = 0; j < 5; j++ )); do
echo "内层循环的值是 ${j}"
if [ ${j} == 2 ]
then
echo "退出内部循环"
break 2 #退出的层数 2表示退出2层
fi
done
done