Shell即是一种命令语言,又是一种程序设计语言
Shell脚本
Shell脚本是一种为Shell编写的脚本程序
Shell脚本一般以.sh结尾
创建文件hello.sh
1 #!/bin/bash
2 #第一行的"#!"指明脚本用命令解释
3 #第一行必须写#!shebang
4 #除了位于第一行的“#”,其他的“#”都表示注释
5 echo "hello world!"
两种运行方式
交互式:在命令行上去敲
批处理:把命令写在文件中
shell的内置命令:不需要创建子进程的命令,由父进程直接执行
.或source修饰的脚本在执行时会影响到父bash。所以.和source命令是Shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令
Shell变量
赋值和命名规则
变量名和等号之间不能有空格
变量名的命名规则:
- 首个字符必须是字母(a-z,A-Z)
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点
- 不能使用bash里的关键字
变量
1、使用变量:只要在变量名前加“$”即可
第二次赋值时不用加“$”,当变量为右值时才要加“$”
2、只读变量:使用readonly命令可以将变量定义为只读的,只读变量的值不能被改变
3、删除变量:使用unset命令
4、变量类型
- 本地变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他Shell启动的程序不能访问局部变量。只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量和函数
- 环境变量:所有的程序,包括Shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候Shell脚本也可以定义环境变量。环境变量可以由父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给fork出来的子进程。用printenv命令可以显示当前Shell进程的环境变量
- shell变量:shell变量是有shell程序设置的特殊变量。shell变量中有一部分是环境变量,也有一部分是局部变量
- export命令可以将本地变量导出为环境变量
字符串
1、拼接字符串:字符创写在一起就会拼接在一起
2、获取字符串长度:{#字符名}
3、提取字符串:{string:2:4}
4、查找字符串
代换
1、文件代换
通配符:用于匹配的字符
*:匹配0个或多个任意字符
?:匹配一个任意字符
[若干字符]:匹配方括号中任意一个字符的一次出现
2、命令代换:Shell先执行命令,然后将其结果立刻代换到当前命令行中
反引号``:
$():
3、算术代换
(())中的shell变量取值将代换称整数,(())中只能用+-*/和()
对运算结果进行赋值或作为右值:
转义字符
\在C语言和shell中都用作转义字符,紧跟其后的字符取字面值
“-”在Linux中一般会将其当做选项而不是文件名,以-开头的文件的创建方式:
“\”:除了转义字符还有一种用法,在其后紧跟着敲回车,代表着续行
单引号和双引号
1、C语言:单引号——字符的界定符
双引号——字符串的界定符
2、shell:单引号和双引号都是字符串的界定符
(1)单引号:用于保持引号内所有字符的字面值,包括\和回车;字符串内不能出现单引号;如果引号没有配对就回车,shell会给出续行提示符,要求用户将引号配上对
(2)双引号:用于保持引号内所有字符的字面值,包括回车;但以下情况例外:
- $加变量可以取变量的值
- 反引号仍然表示命令替换
- $表示$字面值
- `表示`字面值
- \"表示\"的字面值
- \表示\的字面值