Linux-Shell学习指南

在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