sh脚本
- sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句
- sh脚本的第一行通常以#!组合开始,通常称为shebang
实践
- 创建文本文件my.sh
- 编辑
- 运行
sh脚本与c程序
- sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行
- c程序必须先编译链接到一个二进制可执行文件,然后通过sh的子程序运行二进制可执行文件
命令行参数
实践
sh变量
- sh内置变量:PATH、HOME、TERM
- 除了内置变量外,用户还可使用任何符号作为sh变量(不需要声明)
- 所有的sh变量值都是字符串
- 未赋值的sh变量是NULL字符串
实践
sh中的引号
- sh中有许多特殊字符,如$、/、*、>、<等,要想把它们用作普通字符,可使用\或单引号来引用它们
- \用于引用单个字符
- 单引号用于引用长字符串
- 单引号内没有替换
- 双引号用于保留双引号字符串中的空格,但在双引号内会发生替换
sh语句
- sd语句包含所有Unix/Linux语句,以及可能的I/O重定向
sh命令
内置命令
- sh有许多内置命令,这些命令由sh执行,不需要创建一个新进程
Linux命令
- echo命令:将参数字符串作为行回显到stdout(通常将相邻的多个空格压缩为一个空格,除非有引号)
- expr命令:可通过expr命令间接更改sh变量的值(数值)
- expr string1 OP string2
管道命令
- 在sh脚本中经常使用管道作为过滤器
实用命令
命令替换
- 在sh中,$A会被替换为A值。同样,当sh遇到'cmd'或$(cmd)时,它会先执行cmd,然后用执行的结果字符串替换$(cmd)
sh控制语句
if-else-fi语句
- if [condition]
then
statements
else
statements
fi
for语句
- for VARIABLE in string1 string2 .... stringn
do
commands
done
实践
while语句
- while [condition]
do
commands
done - 当条件为真时,sh将重复执行do-done关键字中的命令
until-do语句
- until [ $ANS = "give up"]
do
echo -n "Enter your answer : "
read ANS
done
case语句
- case ¥variable in
pattern1) commands;;
pattern2) command;;
patternN) command;;
esac
continue和break语句
- 与在C语言一样,continue重启最近循环的下一个迭代,break退出最近循环
sh函数
- sh函数的定义为:
func()
{#function code
}
sh中的通识符
- 星号通识符:sh中最有用的通配符是*,可扩展到当前目录中的所有文件
- ?通配符:查询某文件中的字符
- []通配符:查询文件名中一对[]中的字符
命令分组
- 在sh脚本中,可以用{}或()命令进行分组
eval语句
- eval [arg1 arg1 .. argn]
- eval是一个sh的内置命令
- 它将输入参数字符串连接到一个字符串中,计算一次,即执行变量和命令替换,然后给出结果字符串供sh执行
苏格拉底挑战