if-elif-else-fi
用法(方括号为可选部分)
if
条件
then
结果
[
elif
条件
then
结果
]
[
else
结果
]
fi
例子
#!/bin/bash
if
ls | grep 'demo.log'
then
echo 'found demo.log'
elif
ls | grep 'test'
then
echo 'found test'
else
echo 'not found'
fi
case语句
用法
case $1 in
条件一)
结果
;;
条件二)
结果
;;
*)
结果
;;
esac
例子
#!/bin/bash
case $1 in
"hello")
echo "this is hello"
;;
"world")
echo "this is world"
;;
*)
echo "please input hello or world"
;;
esac
for语句
带列表
for
variable in {list}
do
做处理
done
例子
#!/bin/bash
for i in $1
do
echo $i
done
不带列表
for variable
do
做处理
done
例子
#!/bin/bash
for argument
do
echo "$argument"
done
类c风格
for((i=variable;i<=variable;i++))
do
做处理
done
例子
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo $i
done
while与until循环
while用法
while
条件
do
做处理
done
while例子
#!/bin/bash
i=1;
while((i<=$1))
do
echo $i;
let "i+=1";
done
until用法(注意是条件为假的时候才会执行)
until
条件
do
做处理
done
until例子
#!/bin/bash
i=0
until [[ "$i" -gt 5 ]]
do
let "square=i*i"
echo "$i * $i = $square"
let "i++"
done
break与continue(分别是退出循环和结束本次循环)
#!/bin/bash
for ((i=1;i<10;i++))
do
if
test $i = 1
then
continue
elif
test $i = 6
then
break
else
echo $i
fi
done
select结构
它是bash的扩展结构用于交互式菜单显示,功能类似于case结构比case的交互性要好
select用法
select variable in list
do
做处理
break
done
例子
select number in "1" "2" "3" "4"
do
break
done
echo "you have select $number"
函数
例子
#!/bin/bash
function a {
echo 'test'
}
a #函数引用
#!/bin/bash
b() {
echo 'test12'
}
b #函数引用
test[主要用来测试文件属性,比较字符串及比较数字]
运算符 如果...则为真
string string不是null
-b file file为块设备
-c file file为字符设备
-d file file为目录
-e file file存在
-f file file为一般文件
-g file file有设置它的setgid位
-h file file为符号链接(与-L 同)
-k file file设置了粘滞位(sticky bit)
-L file file为符号链接(与-h同)
-O file file用户拥有该文件
-p file file为命名管道
-r file file(对用户)可读
-s file file不是空的(长度大于0字节)
-S file file存在且为套接字(socket)
-t fd file描述符与终端相关联
-u file file属性位set-user-id置1
-w file file(对用户)可写
-x file file(对用户)可执行
-n string 字符串是非null (长度大于0字节)
-z string 字符串为空(长度为0字节)
expr1 -a expr2 两个表达式皆为真(逻辑与)
expr1 -o expr2 两个表达式至少有一个为真(逻辑或)
file1 -nt file 第一个文件比第二个文件新(利用修改时间戳比较)
file1 -ot file 第一个文件比第二个文件旧(利用修改时间 戳比较)
file1 -ef file 两个文件由链接关联在一起(硬链接或符号链接)
var1 = var2 第一个字符串与第二个字符串相同
var1 != var2 第一个字符串与第二个字符串不相同
var1 -eq var2 第一个整数与第二个整数相等
var1 -ne var2 第一个整数不等于第二个整数
var1 -lt var2 第一个整数小于第二个整数
var1 -le var2 第一个整数小于或等于第二个整数量
var1 -gt var2 第一个整数大于第二个整数
var1 -ge var2 第一个整数大于或等于第二个整数
例子
#!/bin/bash
num1=100
num2=100
if
test $[num1] == $[num2]
then
echo 'equal'
else
echo 'not equal'
fi
expr
计算整数变量值,需要注意的是expr与操作数据,以及操作数据与运算符之间都需要用空格隔开
例子(直接在终端运行)
s=`expr 2 + 3`
expr $s \* 3
或者(一步计算)
expr `expr 2 + 3` \* 4
let
计算整数变量值,需要注意的是运算符与操作数据之间不必用空格分开,但表达式与表达式之间必须要用空格分开
例子
let s=(2+3)*4
echo $s
shift
使位置变量下移一位($2代替$1、$3代替$2,并使$#变量递减),当最后一个参数显示给用户,$#会等于0,$*也等于空
例子
#!/bin/bash
while [[ "$*" != "" ]]
do
echo "$1"
shift
done
getopts
可以获取用户在命令下的参数,然后根据参数进行不同的提示或者不同的执行
./test.sh -a hello
getopts一共有两个参数,第一个是-a这样的选项,第二个参数是 hello这样的参数
选项之间可以通过冒号:进行分隔,也可以直接相连接,:表示选项后面必须带有参数,如果没有可以不加实际值进行传递比如输入./test.sh -c 不会报错,但是输入./test.sh -a会报错
例子
#!/bin/bash
while getopts "ca:b:" opt;
do
case $opt in
a)
echo "this is -a the arg is $OPTARG"
;;
b)
echo "this is -b the arg is $OPTARG"
;;
c)
echo "this is -c"
;;
esac
done