Shell 程序设计
什么是 shell
shell 是用户与 LINUX 系统间接口的程序,它允许用户向操作系统输入需要执行的命令 。shell 在表面上与 WINDOWS 的命令提示符相似,但是它具有完成复杂程序设计的功能。通过 shell 可以执行命令,调用 LINUX 工具,还可以自行编写程序。shell 使用解释型语言,指令不需要编译且是逐行执行的,所以当 shell 出现语法错误时,只有执行到才会被发现。在 LINUX 系统中可以通过命令 #/bin/sh –version 来查看 shell 的版本。我的LINUX (Fedora9)shell 的版本是:GNU bash, version 3.2.33(1)-release (i386-redhat-linux-gnu)
重定向输出
- # echo “This is a shell tets” > /tmp/shell_test
默认情况下,shell_test的内容被覆盖
- # echo “This is a shell tets” >> /tmp/shell_test
默认情况下,输出的内容附加到shell_test的末尾
shell 语法
1、 变量
shell 变量在使用前不需要先定义,大小写敏感。默认情况下,所有变量都被看做是字符串并以字符串来存储。在变量面前加一个 $ 号来访问变量,如 $a ,即访问变量 a 的内容。如果字符串里面包含有空格,要用引号把它们括起来,且等号两边不能有空格。
我们可以通过 read 命令来读取变量,如:
- # read tmp
- Hello , I am shell
- # echo $tmp
- Hello , I am shell
当用 read 命令读取变量时,即使字符串中有空格也不需要用引号将它们括起来。
在输出变量的内容时,使用单引号跟反斜线(\)时不进行变量的替换,使用双引号时则要进行变量的替换。
环境变量:
$HOME 当前用户的主目录
$PATH 以冒号分隔的用来搜索命令的列表
$PS1 命令提示符
$PS2 二级提示符
$IFS 输入域分隔符
$S0 shell 脚本的名字
$# 传递给 shell 脚本的参数个数
$$ shell 脚本的进程号
参数变量:
$S1,$S2,…… 脚本程序的参数
$* 在一个变量中列出所有的参数,各个参数之间用 IFS 中的第一个字符隔开
$@ 在一个变量中列出所有的参数,不受环境变量 IFS 的影响。
控制结构
1、if 语句
- if condition
- then
- statements
- elif condition
- statements
- else
- statements
- fi
2、 for 语句
- for variable in values
- do
- statements
- done
3、 while 语句
- while condition
- do
- statements
- done
4、 until 语句
- until condition
- do
- statements
- done
5、 case 语句
- case variable in
- pattern [ | pattern] …) statements ;;
- pattern [ | pattern] …) statements ;;
- …
- esac
6、 命令列表
AND 列表:遇到假则返回。
- statements1 && statements2 && statements3
OR 列表:遇到真则返回。
- statements1 | | statements2 | | statements3
7、 函数
- function_name () {
- statements
- }
命令
break 、 continue、 .(true) 、eval (对参数求值)、exec(将shell 替换为另一个程序) 、 exit n 、export 、expr(对表达式求值,相当于 $( ( ) )) 、printf 、return 、set 、shift 、
trap 、unset 、find 、 grep 。要重点学习 find 和 grep 命令。