传入参数
$0:命令名称
$1-n:参数
$#:参数个数
$*:所有参数一个字符串
$@:所有参数空格分隔
$?:上一个命令退出状态
while [ $# -gt 0 ]
do
echo $1
shift
done
变量
1.定义与引用
a=1
echo $a
2.引号是为了区分分隔而存在,特别是为了包含空格!
a="1 2"
echo $a
echo 123$a
echo "123$a"
3.变量可以和常量混在一起;{}的三种用法:隔离变量名、迭代、数组值引用
echo $a"123"
echo ${a}123
mkdir tmp{1 2 3}
4.数组
y=(1 2 3 "we")
y[4]=rt
echo ${y[0]},${y[4]}
echo ${y[*]}#查看所有元素(以一个字符串形式)
echo ${y[@]}#查看所有元素(以分离的元素形式)
echo ${#y[*]}#查看所有元素个数
echo ${!y[*]} #查看所有元素下标
5.declare -p a#显示变量名和值
将命令结果赋给变量
a=$(ls -l)
a=`ls -l`
请求用户输入变量
read -s -t 5 -n 1 -p "do you accept [Y/N]?" a
整数运算
1.let x=1+3#在let后面进行运算
2.((x=1+2))#在双括号内进行运算
3.echo $((a=1+2))#输出
4.a=$(expr $a + 1)
5.a=`expr $a + 1`
6.declare -i c
c=2+3
expr命令:计算整数并输出值(运算符前后要空格)
expr 1 + 2
expr 2 \* 3
expr 1 = 2
expr 2 \>= 4
export命令
导出环境变量,可以用于当前shell和子shell
export var#导入环境变量
export var="123"#赋值和导出一体化
export -n var#取消环境变量
export -p#显示当前所有环境变量
declare命令
1.declare -a array#定义数组
2.declare -A array#定义关联数组
3.declare -i var#定义整数
4.declare -g var#在函数中定义全局变量
5.declare -p var#显示var变量的属性和值
条件判断:test 和[ ]命令
test 条件式 等价于: [条件式]
1.整数关系判断
[ $a -gt $b ]
[ $a -eq $b ]
[ $a -ne $b ]
[ $a -ge $b ]
2.字符串关系判断
[ $str = 123 ]
[ $str != 123 ]
[ $str \> 123 ]
[ -z $str ]
[ -n $str ]
3.文件判断
[ -e file ]
[ -d file ]
[ -f file ]
[ -x file ]
4.逻辑
[ -e my.c -a -f my.c ]
[ -d my.c -o -f my.c ]
[ ! -e my.c ]
5.[[ ]]:直接用( ),逻辑符号用&&和||
[ -e 2.c -a \( 1 -gt 2 -a -e my.c \) ]#用括号表示优先级,这样写不好阅读
[[ ("ab" > "ac") && ( -e 1.c ) ]]
6.(( ))整数运算和比较
7.命令的与和非
[ -e 1.c ] && [ ! -e 2.c] && mv 1.c 2.c
if语句
1.if [ -e 1.c ]
then
rm 1.c
fi
2.if [ -e 1.c ]
then
rm 1.c
elif [ -e 2.c ]
rm 2.c
else [ -e 3.c ]
rm 3.c
fi
case 语句
case $day in
1) echo 1;;
2) echo 2;;
*) echo others;;
esac
for语句
1.
IFS=;
for a in 1;2;3;eesp
do
echo $a
done
2.
for (( a=1;a<10;a++))
do
echo $a
done
while语句
while [ $a -gt 10 ]
do
echo $a
((a=a+1))
let a=a+1
a=$(expr a + 1)
done
函数
function myfun()
{
echo $1,$2
}
myfun 1 2
a=$(myfun 1 2)