Shell脚本
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
Bash 是大多数Linux 系统默认的 Shell。在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh
,它同样也可以改为 #!/bin/bash
。
#!
告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
传递参数
Shell 脚本获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
另外,还有几个特殊字符用来处理参数:
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@“用「”」括起来的情况、以"$1" “$2” … “$n” 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
输入/输出重定向
默认情况下,标准输入和标准输出都是终端。
重定向命令列表如下:
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
注意:文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
多命令执行符
多命令格式 | 作用 |
---|---|
顺序执行:命令1;命令2 | 多个命令顺序执行,命令之间无任何逻辑关系 |
逻辑与:命令1&&命令2 | 逻辑与:当命令1正确执行后,命令2才会正确执行,否则命令2不会执行 |
逻辑或:命令1||命令2 | 逻辑或:当命令1不正确执行后,命令2才会正确执行,否则命令2不会执行 |
管道符:命令1| 命令2 | 命令1的正确输出作为命令2的操作对象 |
通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或多个任意字符,也就是可以匹配任何内容 |
[] | 匹配括号中任意一个字符 |
[-] | 匹配括号中任意一个字符,“-”代表范围 |
[^] | 逻辑非,表示匹配不是括号内的一个字符 |
Bash中其他特殊符号
符号 | 作用 |
---|---|
‘’ | 单引号,在单引号中所有的特殊符号,如“$”和“`”(反引号)都无特殊含义 |
“” | 双引号,在双引号中特殊符号都无特殊含义,但“$”、“`”(反引号)和“\”是例外,拥有“调用变量值”,“引用命令”和“转义符”的特殊含义 |
“ | 反引号:反引号括起来的内容是系统命令,在Bash中先会执行它和() |
$() | 和反引号作用相同,用来引用系统命令 |
# | 在shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到 |
\ | 转义符,跟在\之后的特殊字符将失去特殊含义,变为普通字符 |