shell学习笔记-基本语法及操作符
更新日期:
本章讲述了shell的基本语法及操作符。
入门
-e 执行控制字符
echo -e “\a”
控制字符 | 作用 |
---|---|
\a | 警告音 |
\b | 退格键,即向左删除一格 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,即Tab键 |
\v | 垂直制表符 |
\0nnn | 八进制输出 |
\xhh | 十六进制输出 |
字体颜色
echo -e “\e[1;31m 文字 \e[0m”
\e:调用颜色
[1:开启颜色选项
\e[0:关闭颜色选项
代码 | 颜色 |
---|---|
30m | 黑色 |
31m | 红色 |
32m | 绿色 |
33m | 黄色 |
34m | 蓝色 |
35m | 洋红色 |
36m | 青色 |
37m | 白色 |
脚本执行
赋予执行权限,直接运行
12chmod 755 hello.sh./hello.sh通过bash调用执行脚本
1bash hello.sh
bash的基本功能
查看与设定别名
查看别名:alias
设定别名:
alias 别名=’原命令’
别名永久生效
|
|
删除别名
常用快捷键
快捷键 | 功能 |
---|---|
ctrl+c | 强制终止当前命令 |
ctrl+l | 清屏 |
ctrl+a | 光标移动到命令行首 |
ctrl+e | 光标移动到命令行尾 |
ctrl+u | 从光标所在位置删除到行首 |
ctrl+z | 把命令放入后台 |
ctrl+r | 在历史命令中搜索 |
输出重定向
|
|
将ifconfig应该显示到显示器上的内容,写入test.log中。如果test.log有内容,则覆盖内容。
|
|
将ifconfig应该显示到显示器上的内容,写入test.log中。如果test.log有内容,则追加内容。
|
|
将命令的错误输出,输出到指定的文件,写入test.log中。如果test.log有内容,则覆盖内容。
|
|
将命令的错误输出,输出到指定的文件,写入test.log中。如果test.log有内容,则追加内容。
格式 | 含义 |
---|---|
命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 &>> 文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 >> 文件a 2>>文件b | 把正确的输出追加到文件a中,把错误的输出追加到文件b中 |
|
|
将命令的运行结果丢弃,弃之不用。
输入重定向
|
|
统计test.log文件下的行数,单词数,字符数
wc 的选项:
- -c:统计字节数
- -w:统计单词数
- -l:统计行数
管道符
多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与;当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或;当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行 |
|
|
即:如果命令正确执行,输出yes,如果没有正确执行,输出no。
管道符
|
|
命令1的正确输出作为命令2的操作对象。
常用管道符: grep、more、wc
通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符。 |
* | 匹配0个或任意多个任意字符,即匹配任何内容。 |
[] | 匹配中括号中任意一个字符。例如:[abc] |
[-] | 匹配中括号中任意一个字符,-代表范围。例如:[a-z] |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配非数字字符 |
bash中其他特殊符号
符号 | 作用 |
---|---|
‘’ | 单引号。单引号中的所有特殊符号,如“$”,“`”都没有特殊含义。 |
“” | 双引号。双引号中的特殊符号没有特殊含义,但“$”,“`”,“\”例外,分别表示“调用变量的值”,“引用命令”,“转义符” |
`` | 反引号。反引号括起来的内容是系统命令,在bash中会先执行它,和$()作用一样,不过推荐使用$(),因为反引号非常容易看错 |
$() | 和反引号作用相同,用来引用系统命令。 |
# | 在shell脚本中,#开头的行表示注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。 |
Bash变量
什么是变量
在Bash中,变量的默认类型都是字符型。
查看所有变量命令:set.
查看环境变量命令:env.
set -u:如果设定此选项,调用未声明变量时会报错(默认无任何提示)。
删除变量:unset。
例:unset name;删除name变量
删除变量name,直接写变量名name就可以了,不需要写变量值$name;
变量的分类
用户自定义变量
变量名=变量值
等号左右均没有空格!!!
如果变量值有空格,必须用双引号或单引号包含起来。
|
|
变量叠加
|
|
环境变量
环境变量是全局变量,在所有shell中都有效;
用户自定义变量是局部变量,只在当前shell中有效。
用户定义环境变量
常用环境变量
语系变量
语言支持
安装第三方插件 zhcon 可以使Linux支持中文。
位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第1到第9个参数,10以上的参数需要用大括号包含,如${10}. |
$* |
这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体. |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待. |
$# | 这个变量代表命令行中所有参数的个数. |
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
接收键盘输入
接收键盘输入命令:read
|
|
shell变量
缺点:
- 弱类型
- 默认字符串型
declare声明变量类型
|
|
export test=1 相当于 declare -x test=1,都是将变量声明为环境变量
声明数组变量
|
|
数值运算方法
方法1:declare 运算符
|
|
方法2:expr 和 let 数值运算工具
|
|
方法3:”$((运算式))” 或者 “$[运算式]”
推荐使用$(())
|
|
运算符优先级:
优先级越大的先执行
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 此处代表正负数,不是加减 |
12 | !,~ | 逻辑非,按位取反或补码 |
11 | *,/,% | 乘,除,取模 |
10 | +,- | 加,减 |
9 | <<,>> | 按位左移,按位右移 |
8 | <=,>=,<,> | 小于等于,大于等于,小于,大于 |
7 | ==,!= | 等于,不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= | 赋值,运算且赋值 |
变量测试
- 变量测试仅仅适用于shell编程
- 变量测试在脚本优化的时候有用
本章完!