在Linux系统中,shell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,特别是在部署一键安装开发环境的情况.
设定执行文件的程序
和其他语言一样,文件第一行就必须指定文件的程序,这样才可以作为可执行文件
#!/bin/bash
编辑好脚本后,还需要设定权限,才能执行
chmod +x filename.sh
然后可以通过:./filename.sh执行脚本
脚本的基本语法
这里列出写可以sh脚本所需要掌握的基本语法
变量
变量不需要声明,取出变量名可以加个美元符号$,如下代码:
#!/bin/bash
a = "hello world"
echo "A is:"
echo $a
变量和其他文字混淆,必须加{}来划分
echo "${a} ruanrongcheng"
Unix命令
sh脚本文件中可以使用任意的Unix命令,这里列出一些常用的命令,这些命令用来进行文字和文字操作。
常用的命令:
echo "aaa" #文字内容打印到屏幕上
ls #文件列表
cp sourcefile destfile #文件拷贝
mv oldname newname # 重命名文件或移动文件
grep pattern file #在文件中搜索字符串
cat filename.txt #输出文件内容到标准屏幕
find ./ #递归查找
tar -zxf filename.tar.gz -C /usr/local #解压tar.gz文件到指定的目录
管道、重定向、backtick
管道(|)将一个命令的输出作为另外一个命令的输入,更多有关管道的知识,可以访问Linux Shell中的管道命令
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)
1. ">" 写入文件并覆盖旧文件
2. ">>" 加到文件的尾部,保留旧文件内容
反短斜线可以将一个命令的输出作为另外一个命令的命令行参数
流程控制
if条件
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脚本自动解压压缩文件,代码如下:
#!/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
执行命令:
smartzip filename.zip
$1就是第一个命令行参数字符串filename.zip。$* 表示所有输入的命令参数。$#表示参数的个数
select表达式
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
while循环
while ...;do
....
done
for循环
for var in ...;do
...
done
引号
向程序传递变量参数,会扩展通配符和变量。
引号将防止这种通配符扩展.双引号可以防止通配符扩展,但是允许变量扩展。
单引号则都不允许
#目录下有mail.jpg和tux.jpg
#!/bin/bash
echo *.jpg #===>mail.jpg tux.jpg
echo "*.jpg" #===>*.jpg
echo '*.jpg' #===>*.jpg
echo $SHELL #/bin/bash
echo "$SHELL" #/bin/bash
echo '$SHELL' # $SHELL