脚本开头必须有:
#!/bin/sh
脚本结束后用:
chmod +x filename
修改脚本使用权限
变量定义:
变量名=值
在变量名之前加一个$,就可以取出变量值:
**********************************
#!/bin/sh
#对变量赋值:
a="hello world"
# 打印变量a的值:
echo "A is:" $a
**********************************
**********************************
num=2
echo "this is the ${num}nd"
***********************************
管道 |
重定向 < > >>
反短斜线
使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
流程控制
if ....; then
....
elif ....; then
....
else
....
fi
条件测试:
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
case表达式可以用来匹配一个给定的字符串,而不是数字
case ... in
...) do something here ;;
esac
我们利用这一点写了一个叫做smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:
{file命令可以辨别出一个给定文件的文件类型,如:file lf.gz,该命令输出结果为:
lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix
}
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac
您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。也就是说,当我们运行:
smartzip articles.zip
$1 就是字符串 articles.zip
select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。
*********************************
select var in ... ; do
break
done
.... now $var can be used ....
*********************************
*********************************
while ...; do
....
done
*********************************
引号 (单引号和双引号) 将防止这种通配符扩展:
****************
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
运行结果为:
/bin/bash
/bin/bash
$SHEL
*****************