#!/bin/bash
# My first bash shell
string="Hello World"
echo $string
将文件保存为test.sh,更改文件权限chmod +x test.sh,执行./test.sh来运行脚本。
程序解释
开头
"#!"是一种约定标记,告诉系统该脚本使用什么解释器来执行,即使用哪一种Shell。使用指令cat /etc/shells
查看系统支持的Shell种类,一般有以下几种:
- Bourne Shell (/bin/sh) Unix系统默认的shell。
- Bourne Again Shell (/bin/bash) bash是Linux标准默认的shell,本教程基于bash讲解。
变量
string="Hello World"
变量一般为英文字母组合,无需声明,直接定义即可。值得注意的是:
- 变量名和等号之间不能有空格
- 已定义的变量可以被重新定义
- 使用变量时在变量前加美元符号$
在使用变量时,变量名外面花括号{}是可选的,即echo $string
和echo ${string}
都是合法的。建议使用花括号,这样可以帮助编译器识别变量的边界。
字符串
字符串是Shell编程里最常用的数据类型。字符串可以使用单引号,也可以使用双引号,两者的区别主要如下:
单引号
string='Hello World'
1)单引号里的任何字符串都会原样输出,里面若包含变量名,则变量无效
2)单引号字符串中不能出现单引号
双引号
my_name=subond
string="Hello World by ${my_name} ! \n"
双引号里可以有变量,可以使用转义字符。
使用符号#可以获取字符串长度,举例如下:
string="Hello World"
echo ${#string}
注释
以“#”开头的行就是注释,Shell编程里没有多行注释,只能每一行加一个#号。
一个Shell脚本文件可以看做是包含许Shell指令的文本。Shell脚本一般包括:
- Shell关键字;if...else,do...while,etc;
- Shell命令;pwd,test,echo,etc;
- Linux二进制指令,w,who,free,etc;
- 文本处理工具,grep,awk,cut,etc;
- 函数
- 控制流
Bash Shell一般包含两种类型的命令:内建(内部)命令和外部命令。Bash shell允许输入以下类型的命令:别名、关键字、函数、内建指令和文件。
使用type
命令可以查看命令是否为内建命令或者外部命令。例如:
type -a ls
使用which
命令可以命令的路径或者位置。例如:
which ls
以下是bash的关键字和内建命令的列表:
我们可以使用-x选项来调试脚本,比如bash -x scriptName
或者在脚本文件里使用#!/bin/bash -x
,效果是一样的。
也可以使用set内建命令来调试脚本。例如:
#!/bin/bash
#turn on debug mode
set -x
echo "Hello world"
#turn off debug mode
set +x
- set -x:脚本执行时显示 命令及参数
- set -v:显示脚本输入
- set -n:读取命令但不执行命令