bash编程
时间:2010-07-14 来源:cainoma
1. 位置参量和命令行参数
$0 # 脚本名
$1 # 第一个命令行参数
${10} # 第十个参数
$# # 位置参量个数
$@/$* # 所有的位置参量
"$*" # 单个变量(eg:"$1 $2 $3")
"$@" # 多个单独的变量(eg:"$1" "$2" "$3")
$1...${10} # 单独的位置参量
set命令重置位置参量
2. 条件结构和流程控制
一 echo $? 查看上一个命令成功与否 0 成功 1 失败
二 test命令操作符 *注意添加空格
字符串测试(string:字符串)
[ string1 = string2 ] # string1等于string2(=两边必须有空格)
[ string1 == string2 ] # string1等于string2
[ string1 != string2 ] # string1不等于string2(!=两边必须有空格)
[ string ] # string不为空
[ -z string ] # string的长度为0
[ -n string ] # string的长度不为0
[ -l string ] # string的长度(字符数)
# eg: test -n $word 或 [-n $word]
# eg: test tom = sun 或 [tom = sun]
逻辑测试
[ string1 -a string2 ] # string1和string2都为真
[ string1 -o string2 ] # string1或string2至少一个真
[ !string1 ] # 字符串不匹配
逻辑测试(复合命令;pattern:模式)
||:或
&&:与
[[ pattern1 && pattern2 ]] # pattern1 和 pattern2都为真
[[ pattern1 || pattern2 ]] # pattern1 或 pattern2至少一个真
[[ !pattern1 ]] # 模式不匹配
整数测试(int:符号整数)
[ int1 -eq int2 ] # int1等于int2
[ int1 -ne int2 ] # int1不等于int2
[ int1 -gt int2 ] # int1大于int2
[ int1 -ge int2 ] # int1大于或等于int2
[ int1 -lt int2 ] # int1小于int2
[ int1 -le int2 ] # int1小于或等于int2
用于文件测试的二进制操作符
[ file1 -nt file2 ] # 如果文件file1比file2新则为真(根据修改时间)
[ file1 -ot file2 ] # 如果文件file1比file2老则为真
[ file1 -ef file2 ] # 如果文件file1比file2有相同的设备数或i结点数则为真
范例
$ name=tom;freind=Joseph
$ [[ $name == [Tt]om ]]
$ echo $?
0
$ [[ $name == [Tt]om && $friend == "Jose" ]] # "Jose"被引号括起来的,则不满足
$ echo $? # 若是Jose 则Jose和Joseph都满足
1
三 let命令和带双圆括号的算术运算
* 在(())里的变量不需要$
四 if命令
格式:
if command
then
command
command
fi
(使用test命令测试数字和字符串——老格式)
if test 表达式
then
command
fi
----------
if [ 字符串/数字表达式 ] then
command
fi
(使用test命令测试字符串——新格式)
if [[ 字符串表达式 ]] then
command
fi
(使用let命令测试数字——新格式)
if ((算术表达式))
$0 # 脚本名
$1 # 第一个命令行参数
${10} # 第十个参数
$# # 位置参量个数
$@/$* # 所有的位置参量
"$*" # 单个变量(eg:"$1 $2 $3")
"$@" # 多个单独的变量(eg:"$1" "$2" "$3")
$1...${10} # 单独的位置参量
set命令重置位置参量
2. 条件结构和流程控制
一 echo $? 查看上一个命令成功与否 0 成功 1 失败
二 test命令操作符 *注意添加空格
字符串测试(string:字符串)
[ string1 = string2 ] # string1等于string2(=两边必须有空格)
[ string1 == string2 ] # string1等于string2
[ string1 != string2 ] # string1不等于string2(!=两边必须有空格)
[ string ] # string不为空
[ -z string ] # string的长度为0
[ -n string ] # string的长度不为0
[ -l string ] # string的长度(字符数)
# eg: test -n $word 或 [-n $word]
# eg: test tom = sun 或 [tom = sun]
逻辑测试
[ string1 -a string2 ] # string1和string2都为真
[ string1 -o string2 ] # string1或string2至少一个真
[ !string1 ] # 字符串不匹配
逻辑测试(复合命令;pattern:模式)
||:或
&&:与
[[ pattern1 && pattern2 ]] # pattern1 和 pattern2都为真
[[ pattern1 || pattern2 ]] # pattern1 或 pattern2至少一个真
[[ !pattern1 ]] # 模式不匹配
整数测试(int:符号整数)
[ int1 -eq int2 ] # int1等于int2
[ int1 -ne int2 ] # int1不等于int2
[ int1 -gt int2 ] # int1大于int2
[ int1 -ge int2 ] # int1大于或等于int2
[ int1 -lt int2 ] # int1小于int2
[ int1 -le int2 ] # int1小于或等于int2
用于文件测试的二进制操作符
[ file1 -nt file2 ] # 如果文件file1比file2新则为真(根据修改时间)
[ file1 -ot file2 ] # 如果文件file1比file2老则为真
[ file1 -ef file2 ] # 如果文件file1比file2有相同的设备数或i结点数则为真
范例
$ name=tom;freind=Joseph
$ [[ $name == [Tt]om ]]
$ echo $?
0
$ [[ $name == [Tt]om && $friend == "Jose" ]] # "Jose"被引号括起来的,则不满足
$ echo $? # 若是Jose 则Jose和Joseph都满足
1
三 let命令和带双圆括号的算术运算
* 在(())里的变量不需要$
四 if命令
格式:
if command
then
command
command
fi
(使用test命令测试数字和字符串——老格式)
if test 表达式
then
command
fi
----------
if [ 字符串/数字表达式 ] then
command
fi
(使用test命令测试字符串——新格式)
if [[ 字符串表达式 ]] then
command
fi
(使用let命令测试数字——新格式)
if ((算术表达式))
相关阅读 更多 +