传递参数
执行脚本的时候,可以向脚本传递参数,脚本内获取参数的格式为:n。 n代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参数… 但是参数过多,如10,就要用{}括起来,{10}
举个例子:
先创建一个脚本try.sh,内容如下
#!/bin/bash
#try
echo “脚本名:$0”
echo “第一个参数: $1”
echo “第二个参数:$2”
echo “第十个参数:
10
"
e
c
h
o
"
第
十
个
参
数
:
10" echo "第十个参数:
10"echo"第十个参数:{10}”
echo “参数总数: $#”
echo “参数全部输出: $*”
echo “参数全部输出: $@”
运行
bash ./try.sh 1 2 3 4 5 6 7 8 9 aa 11
脚本名:./try.sh
第一个参数: 1
第二个参数:2
第十个参数:10 ----这边未加{},所以认为 $1 后面加 0
第十个参数:aa ----正确结果
参数总数: 11
参数全部输出: 1 2 3 4 5 6 7 8 9 aa 11 同"1 2 3 4 5 6 7 8 9 aa 11"
参数全部输出: 1 2 3 4 5 6 7 8 9 aa 11 同"1" “2” “3” …“aa” “11”
运算符
算数运算符
a=10;b=20
[ $a == $b ];echo $? ----1 中间有空格; $? 标识上一步的结果,如果0正确,其他数字都是错误
[ $a != $b ];echo $? ----0
c=expr $a + $b
;echo $c —30
d=expr $a \* %b
;echo $c —200 乘法要用\标识一下
关系运算符
主要包括以下几种:
ge 大于等于
eq 等于
ne 不等于
gt 大于
lt 小于
le 小于等于
-a 逻辑与 等价于 &&
-0 逻辑或 等价于 ||
[ $a -eq $b ];echo $? ----1 等于
[ $a -lt $b ];echo $? ----0 小于
[ $a -gt $b ];echo $? ----1 大于
[ $a -ne $b ];echo $? ----0 不等于
[ $a -le $b -a $a -eq $b ];echo $? — 1 小于等于且等于
[ $a -le $b -a $a -eq $b ];echo $? — 0 小于等于或等于
字符串运算符
主要包括以下几种:
-z 检测字符串长度是否为0,为0返回 true
-n 检测字符串长度是否为0,不为0返回true
[ str ] 检测字符串是否为空,不为空返回true
a=“hello shell”
[ -n “$a” ];echo
?
−
−
−
0
不
为
0
,
返
回
t
r
u
e
[
−
z
"
? --- 0 不为0,返回true [ -z "
?−−−0不为0,返回true[−z"a" ];echo
?
−
−
−
1
不
为
0
,
返
回
f
a
l
s
e
[
"
? --- 1 不为0,返回false [ "
?−−−1不为0,返回false["a" ];echo
?
−
−
−
0
字
符
串
不
为
空
,
返
回
t
r
u
e
i
f
[
"
? --- 0 字符串不为空,返回true if [ "
?−−−0字符串不为空,返回trueif["str" ];
then
echo “不是空”;
else
echo “空字符串”;
fi -----不是空
文件测试运算符
主要包括一下几种:
-e 检测文件是否存在,存在返回true
-d 检测是否是目录,是返回true
-f 检测是否是普通文件,是返回true
-r 检测文件是否可读,如果是,则返回 true
-w 检测文件是否可写,如果是,则返回 true
-x 检测文件是否可执行,如果是,则返回 true
d=’/d/awk.txt’
[ -f $d ];echo $? ----0 d是文件,正确返回 0
[ -e $d ];echo $? ----0 文件存在,正确返回 0
[ -d $d ];echo $? ----1 是文件不是文件夹,错误返回 1
[ -r $d ];echo $? ----0 可读文件,返回 0
[ -w $d ];echo $? ----0 可读文件,返回 0
循环
if - then - else
d=’/d/awk.txt’
if [-e $d ] ---- 文件存在,所以 file exist
then
echo file exist
else
echo file not exist
fi
if [ -d $d ] ---- file
then
echo not dir
elif [ -f $d ]
echo file
else
echo over
fi
for 循环
遍历数组
a=(1 2 3 4 5 6)
for i in ${a[*]}
do
echo ${i}
done ---- 1 2 3 4 5 6
遍历文件夹
for file in ls
do
echo $file
done 2.20/ 2.22/ 2.23/ 2.26/
while 循环
a=0
while [[ $a -lt 5 ]]; ----0 1 2 3 4
do
echo ${a}
a=expr $a + 1
done
配合break a 为2的时候
a=0
while [[ $a -lt 5 ]]; ----0 1 2
do
echo ${a}
if [[ $a -eq 2 ]]
break
else
a=expr $a + 1
done
配合continue
a=0
while [[ $a -lt 5 ]]; ----0
do
echo ${a}
if [[ $a -eq 2 ]]
continue
else
a=expr $a + 1
break
done