shell编程基础
shell,即命令解析器,将用户输入的指令转换为相应的机器能够运行的程序。
shell脚本的第一行必须是如下格式:
#! /bin/sh
符号#!用来指定该脚本文件的解析程序。
当编辑好脚本后,如果要执行该脚本,还必须使其具有可执行属性,即执行以下命令:
chmod +x filename
1.注释
在shell程序中,以#开头的句子表示注释,直到这一行结束。
2.变量
在shell编程中,所有的变量都由字符串组成,并且不需要预先对变量进行声明。有时候变量名很容易和其他字符混淆,可以使用{}来区分,例如:echo "this is the ${num}nd people."。
2.1 默认变量
$#:传入脚本的命令行参数个数。
$*:所有命令行参数值,各个参数值之间用空格隔开。
$0:命令本身(shell文件名)。
$1:第一个命令行参数。
$2:第二个命令行参数。
2.2 局部变量
在变量首次被赋值时加上local关键字可以声明一个局部变量。
2.3 注意
变量赋值时,“=”左右两边都不能有空格。
BASH中的语句结尾不需要分号。
3.if语句
if [ expression ]
then
#code block
else if [ expression ] #或者是:elif [ expression ]
then
#code block
else
#code block
fi
fi
4.比较操作
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n
5.if语句和比较操作举例(test.sh):
#! /bin/bash
a=$1
b=$2
if [ -z $a ] || [ -z $b ]
then
echo "please enter two numbers."
exit 1
fi
if [ $a -eq $b ]
then
echo "number a == number b"
else if [ $a -gt $b]
then
echo "number a > number b"
elif [ $a -lt $b ]
then
echo "number a < number b"
fi
fi
#注意在“[”和“]”左右都要有空格
#注意“=”左右都要有空格
6.文件判断
-e 文件已经存在
-f 文件时普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
7.for循环
基本结构是:
for var in [list]
do
#code block
done
其中var是循环控制变量,[list]是var需要遍历的一个集合,do/done对包含了循环体。另外如果do和for被写在同一行,必须在do前面加上“;”。如果list列表被包含在一对双括号中,则被认为是一个元素。
8.while循环
while循环的基本结构是:
while [ condition ]
do
#code block
done
9.until循环
until循环的基本结构是:
until [ codition ]
do
#code block
done
10.case语句
bash中的case结构与c语言中的switch语句的功能类似,可以用于进行多分支控制。
case "$var" in
codition1)
;;
codition2)
;;
*)
default statments;;
esac