解释器
sh
即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。
bash(Bourne Again Shell)
Bash是Bourne shell的替代品,属GNU Project,二进制文件路径通常是/bin/bash。业界通常混用bash、sh、和shell
在CentOS里,/bin/sh是一个指向/bin/bash的符号链接:
csh(C Shell)
是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
Tcsh
是 Linux 提供的 C Shell 的一个扩展版本。Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
ksh(Korn Shell)
集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
pdksh
是 Linux 系统提供的 ksh 的扩展。支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
For
循环输出hello
1 |
|
需要注意的是,第一行代码指定当前脚本默认的解释器
shell 运行方式
- ./test.sh 那么调用第一行代码指定的解释器执行test.sh。(前提test.sh有x权限)
- sh test.sh 默认调用系统bash shell解释器执行test.sh,此时第一行代码指定的解释器将无效。
遍历
1 | for skill in Ada Coffe Action Java; |
变量
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
定义变量
声明变量方式与python类似,只不过使用变量时,需要在变量前添加$符号
1 | # 需要注意,=两边不能有空格 |
单引号字符串的限制
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号字符串的优势
可以有变量
可以出现转义字符
拼接字符串
1 | your_name="six" |
变量外面的{}是可选的,为了帮助解释器识别变量的边界,建议加上。
获取字符串长度
1 | test_str="hello word" |
输出 10
字符串截取
1 | test_str="hello word" |
输出 hello
只读变量
1 | url="http://www.hello.com" |
删除变量
1 | unset variable_name |
数组
定义数组
第一种方式
1 | array_name=( |
输出结果 value0
第二种方式
1 | array_name[0]=value0 |
输出结果 value1
输出数组所有元素
1 | array_name=( |
输出结果 value0 value1 value2 value3
数组长度
1 | array_name=( |
输出 4
传递参数
脚本内获取参数的格式为:$n
n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
其中$0表示为执行文件的名字