变量赋值
变量名=值
注:等号两边不能有空格,如字符串中有空格需用引号括起。
引用变量
$变量名 或 ${变量名}
内部变量
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程I D号
$! 后台运行的最后一个进程的进程I D号
$@ 使用时加引号,并在引号中返回每个参数
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
环境变量
$LOGNAME 用户的登录名
$HOME 用户自己的主目录
$SHELL SHELL路径
$PATH 命令执行时的目录
$MAIL 保存邮箱路径名
$MAILCHECK 检查新邮件的时间
$PS1 shell命令行的提示符
$PS2 命令未打完时,再输入的提示符
$MANPATH man指令的搜索路径
设置环境变量,变量名=值;export 变量名
清除环境变量,unset 变量名
显示所有环境变量,env
数组
数组名[下标]=值
数组名=(值1 值2 ……)
如:week=(a b c)
week[3]=d
echo ${week[0]}
echo ${week[*]}
控制流结构
条件测试
test condition 或 [ condition]
test命令用于测试字符串,文件状态和数字,使用最后退出状态命令$?可测知test,以0表示正确,1表示错误
例子:
test –f “m1.c” 或 [ –f “m1.c” ] #使用方括号时,要注意在条件两边加上空格。
echo $?
文件状态测试
-d 目录
-s 文件长度大于0、非空
-f 正规文件
-w 可写
-r 可读
-x 可执行
测试时使用逻辑操作符
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
例子:[ -f “m1.c” -o -d “mydir” ]
echo $?
字符串测试
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
测试数值
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
if语句
if 条件
then 命令
elif 条件2
then 命令
else 命令
fi
举例:
#!/bin/bash
if [ -d "$1" ] #test –f “$1”
then cd "$1"
else mkdir "$1";cd "$1"
fi
条件测试还可以利用一般的命令执行成功与否做判断。
case语句
case 值 in
模式1 | 模式) 命令1 # 多个模式 可用 | 隔开
... #这里可有多条命令, 但最后一条必须以;;结尾
;;
模式2) 命令2
...
;;
esac
例子
case $response in
1) cat $filename;;
2) rm $filename;;
3) echo "bye-bye!";;
esac
while循环语句
while 命令 或 测试条件 #可多个命令
do
命令表
done
for循环语句
for 变量名 in 列表 #in列表用法是可选的,如果不用它, for循环使用命令行的位置参数。
do
命令表
done
HOSTS=”SEVER1 SEVER2 SEVER3 ”
for loop in $HOSTS
do
ping –c 2 $loop
done
until循环语句
until 条件 或 命令
do
命令表
done
until [ $2=”” ]
do
cp $1 $2
shift 2
done
if [ $1!=”” ]
then echo “bad argument!”
fi
使用break和continue控制循环
select语句
select identifier [ in word ] #select x in query a b c
do
命令表
done
函数
函数名()
{
命令表 #$1 参数
return 0
}
函数名 参数 #执行函数
引用函数文件: . /path/funcfilename
#Other
引号
双引号会解析字符$、`、\
单引号会忽略任何引用值。
反引号用于设置系统命令的输出到变量。
(命令替换)
cmd=`ls` #等号两边无空格
echo $cmd
输入输出重定向
即时文件定向符<<
cmd <<HELLO
some string
HELLO
位置参数
每个访问参数前要加$符号。
第一个参数为$0,表示预留保存实际脚本名字。
$1, ${10}
set命令为位置参数赋值
set m1.c m2.c
则$1为m1.c,$2为m2.c。
移动位置参数shift
格式:shift [n] #n向左移动步数
每执行一次shift命令就将命令行上的实参向左移一位, shift命令不能将$0移走。
getopts
输出命令echo
$>help echo #查看全部参数
输入命令read
格式:read 变量1 变量2
算术运算
格式:((算术表达式))
如:((j=6*3+2))
echo $((4**3))
相对C, 除++ 、--和逗号之外, 所有运算符都得到支持。
expr用法
expr命令一般用于整数值,但也可用于字符串。
一般格式为:
expr argument operator argument
eval
CAT_PAS=”cat /etc/passwd | more”
半天也不给我答半天也不给我答eval chmod 777 ~$1
eval $ CAT_PAS
exit命令
exit n
&& 和 ||
cmd && cmd
cmd || cmd
别名
alias cmd=’ls’
unalias cmd
通配符
* ? [ ] [!]
ls –l dwg??[!0-9]*
列出了所有以dwg开头、中间可以是任何两个字符,后面跟随一个非数字字符、然后是任意字符串的文件名。 #这里和正则表达式有所区别