shell的功能
- 自动补全
1 | shell复制代码yum -y install bash-completion |
- 查看历史命令
1 | bash复制代码history #查看所有历史命令 |
- 别名功能
1 | bash复制代码alias h20 = 'head -20' #创建别名,以后就可以用h20 代替后者 |
bash初始化
环境变量的加载
- /etc/profile:
- /etc/bashrc:
- ~/.profile:
- ~/.bash_login
- ~/.bash_profile
- ~/.bashrc
- ~/.bash_logout
加载顺序
图形化界面登录时:1 =>3
图形化界面登录后:打开终端时:2=> 5
文本界面登录时: 2 => 1=>5
su进行用户切换:2=>1=>5
常用命令
1 | bash复制代码command & #让作业进入后台运行 |
重定向
文件描述符
0:标准输入文件
1:标准输出
2:标准错误输出文件
输出重定向:
1 | bash复制代码command >file #将结果以覆盖的方式写入文件(重定向符号前面没写就默认是1) |
&表示的是标准标准正确和错误的集合,
&1指的是标准正确通道,
&2指的是标准错误通道,
/dev/null相当于Linux中的回收站,对于一些不必要的信息可以全部重定向到该目录中,放入的垃圾不可恢复;
输入重定向:
1 | bash复制代码command <file #将file文件中的内容作为command的输入 |
tee
主要是用于将前面结果展示到前端的同时,也可以写入到文件中
1 | bash复制代码cat /etc/profile | tee test.txt #将/etc/profile中的内容展示到前台,同时写入test.txt文件中(值得注意的是:写入文件的方式是覆盖整个文件,如果想以追加的方式写入,就用tee -a) |
命令排序
&& 、|| 实现逻辑判断
&&:表示只有符号前面的命令执行成功后才会执行符号后面的语句
1 | bash复制代码systemctl mysqld start && mysql -uroot -p xxx #只有mysql启动成功才会执行登录命令 |
||:表示符号前面的命令没有执行成功才会执行符号后面的语句
1 | bash复制代码sl || yum install sl #如果sl这个命令使用不成功,就会去安装sl这个命令 |
; 不具备逻辑判断,只是连接两条命令
编程中正常用法
通配符(和正则略有不同)
1 | bash复制代码*: #匹配0个或者多个任意字符(想起mysql模糊查询的%了吗?) |
shell规范
1 | bash复制代码#1.开头必须执行解释器 通过`#!`指定 |
脚本执行检查
1 | bash复制代码sh -n: #不执行script,仅查询语法问题 |
脚本执行方式:
1 | bash复制代码sh == bash #不需要添加权限 |
read
- read 变量名
- read -p “提示信息” 变量名
- read -t n -p”提示信息” 变量名 #-t表示多少秒不输入就算超时
- read -n n 变量名 #表示读取n个输入字符
引用变量
1 | bash复制代码"" : 表示弱引用,引用的值将是变量对应的值 |
变量运算
整数运算
1 | bash复制代码1.使用expr |
小数运算
1 | bash复制代码echo "2/4" |bc #0 |
- 乘积小数点位数默认以乘数中小数点位数最多的为准(不指定scale参数)
- 除法中如果不指定scale参数,则结果没有小数位,小数位数完全按scale值来显示,计算结果的小数位数不足scale的值,则末尾补0
贪婪匹配和非贪婪匹配
一个%为非贪婪匹配,即匹配最短结果。%从右到左进行非贪婪匹配。匹配的内容为以%右边为分割符,分隔符右边的指定字符的最短字符串,然后删掉。
1 | bash复制代码v=www.baidu.com |
两个%%则为贪婪匹配
1 | bash复制代码v=www.baidu.com |
#则和%顺序相反,从左边开始匹配
1 | bash复制代码v=www.baidu.com |
字符串截取还可以用这样的方式:
1 | bash复制代码${value: offset:length} #从offset开始截取指定长度 |
变量替换
使用/
1 | bash复制代码url="www.baidu.com" |
1 | bash复制代码${value:-word}: #当value没有定义或者值为空返回Word的内容,否则返回变量值 |
本文转载自: 掘金