基本内容
- 元字符
- 变量
- 注释
元字符
具有特定功能的保留字IFS(交换字段分隔符)
:由CR(回车键)
: 由=
: 设定变量。$
: 做变量或运算替换(请不要与 shell prompt 搞混了)。>
: 重定向 stdout(标准输出standard out)。<
: 重定向 stdin(标准输入standard in)。|
: 管道命令。&
: 重定向 file descriptor (文件描述符),或将命令置于后台执行。( )
: 將其內的命令置于 nested subshell (嵌套的子shell)执行,或用于运算或命令替换。{ }
: 將其內的命令置于 non-named function(未命名函数) 中执行,或用在变量替换的界定范围。;
: 在前一个命令结束时,而忽略其返回值,继续执行下一個命令。&&
: 在前一個命令结束时,若返回值为 true,继续执行下一個命令。||
: 在前一個命令结束时,若返回值为 false,继续执行下一個命令。!
: 执行 history 列表中的命令;
: 分隔同一行的2条shell语句。
变量
临时变量:是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。
环境变量(永久变量): 其值不随shell 脚本的执行结束而消失。
自定义环境变量
编辑用户配置文件,利用export修改环境变量
1 | [root@localhost ~]#export PATH=/root:$PATH |
临时变量
由字母或下划线打头。 由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制。
使用变量值时,要在变量名前加上“$”
变量赋值
赋值号“=”两边应没有空格。
1 | [root@localhost ~]# abc = 123 |
命令赋给变量
两种方式:
反引号
1 | [root@localhost ~]#A=`date` |
$()
1 | [root@localhost ~]# B=$(date) |
单引号和双引号的区别
单引号之间的内容成为纯文本,取消所有特殊符号的意义;
双引号仅特殊符号 $ \ ` 这三个的含义保留。
1 | [root@localhost ~]#NAME="rm mk docker" |
unset readonly
1 | unset variable_name #删除变量 |
特殊变量
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
!$ | 上个命令最后一个参数 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
$! | 执行上一个后台程序的PID |
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(“ “)包含时,都以”$1” “$2” … “$n” 的形式输出所有参数。 |
|
但是当它们被双引号(“ “)包含时,$* 会将所有的参数作为一个整体,以”$1 $2 … $n”的形式输出所有参数;$@ 会将各个参数分开,以”$1” “$2” … “$n” 的形式输出所有参数。 |
常用PATTERN:
^#: 以#开头
#$: 以#结尾
^$: 空行
Read命令:
作用:从键盘读入数据,赋给变量
参数 :-p -n -t参数结合使用
-p(提示语句)
-n(字符个数)
-t(等待时间)
1 | [root@localhost ~]# vim read1.sh |
expr 命令
作用:Shell变量的算术运算:
expr命令:对整数型变量进行算术运算
语法: expr 表达式 #注意 运算符之间要有空格
1 | [root@localhost ~]#expr 3 + 5 |
注意:乘号(*)前边必须加反斜杠(\)才能实现乘法运算
注释
以“#”开头的行就是注释,会被解释器忽略。
没有多行注释,只能每一行加一个#号。
1 | ##### 用户配置区 开始 ##### |
遇到大段的代码需要临时注释起来,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。