bash的特性
在写变量之后需要先记录一些bash的特性
bash 环境变量文件的加载
-
/etc/profile
全局(公有)配置,不管哪个用户登陆都会读取该文件,用于设置整个系统的环境变量的 -
/etc/bashrc
是用于初始化整个系统 bash 的设置, 比如 bash 的代码补全, bash 的别名, bash 的颜色等. -
~/.bashrc
就是root账户自己的bash设置文件 每个账号家目录下面都会有几个隐藏的配置文件
我的主机启动的时候会显示欢迎画面
这个就是在~/.bash_profile文件里写入的
[root@maomao shell]# vim ~/.bash_profile
export PATH
echo "
我是猫猫
│\__╭╭╭╭╭__/│ .
│ │.. .
│ │.. .
│ ● ● │ .
| ≡ ≡│
│ ╰—╯ │.. .
╰——┬O———O┬——╯
╭—^__^—╮
│〈=-﹏-=〉│
╭═O════O═╮
* * * *│
* *
│ * * |
╰════════╯
猫猫家族
∧_∧ ∧_∧ ∧_ ∧ ∧_ ∧
(^ .^) (^ 、^) (^ 0^) (^ Д^)
----∪-∪-------∪-∪-------∪-∪-------∪-∪---
我是喵喵
.◢\▁▁●●●▁▁/◣
◤ ●●●● ◥
▕ ●● ▕
—— ——
—— ● ● ——
—— 〉 ——
◣ ◢
☆快乐☆ ∞┼∞ ☆幸福☆
███ ∞┼∞ ███
◥█◤ ∞┼∞ ◥█◤
═══╧═══
███▊███"
命令和文件自动补齐
很多命令都会提供一个bash-complete 的脚本,在执行该命令时,敲tab能自动补全参数
linux命令自动补全需要安装bash-completion
yum install -y bash-conpletion
历史命令的记忆功能
Bash有自动记录命令的功能,自动记录到.bash_history隐藏文件中。还可以在下此需要时候直接调用历史记录中的命令
查看之前使用的所有命令
history
显示最近的n个命令
history n
删除相应的第n个命令
history -d n
指定执行命令历史中的第n条语句
!n
指定执行命令历史中倒数第n条语句
!-n
执行命令历史中最后一条语句
!!
实例:
# 比如配置网卡的时候需要输很长一串路径
[root@maomao shell]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@maomao shell]# history
# 查到命令编号是1240
1240 vim /etc/sysconfig/network-scripts/ifcfg-ens33
# !加编号就能直接执行之前的命令
[root@maomao shell]# !1240
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 还可以通过!字母查看 但需要先按ctrl + R 输入关键字
# 比如我先执行一条过滤命令
[root@maomao shell]# ifconfig |egrep '([0-9]{1,3}.){3}[0-9]{1,3}' |awk 'NR==2{print $2}'
172.19.0.1
# 然后按ctrl + R
# 命令行变成这样了 (reverse-i-search)`':
# 我输入ifconfig 则可以直接执行之前的长串命令
(reverse-i-search)`ifconfig': ifconfig |egrep '([0-9]{
1,3}.){
3}[0-9]{
1,3}' |awk 'NR==2{
print $2}'
后台操作的相关命令
-
command(命令) & 直接让作业进入后台运行
-
ctrl+z 将当前作业切换到后台
-
jobs 查看后台作业状态
-
fg %n 让后台运行的作业切换到前台(n是jobs里面显示序号)
-
bg %n 让指定的作业n在后台运行
-
kill %n 移除指定的作业n
n为jobs命令查看的job编号,不是进程id
[root@maomao ~]# jobs
[1]+ Stopped top
[root@maomao ~]# kill -9 %1
[1]+ Stopped top
[root@maomao ~]# jobs
[1]+ Killed top
常用的通配符
注意与正则表达式稍有不同
符号 | 作用 | 补充 |
---|---|---|
* | 匹配0个或者多个字符 | a*b,a与b之间可以有任意长度的字符,也可以没有。如:ajbb,ab,azxcb… |
? | 匹配一个任意字符 | a?b,a与b之间必须但也只能存在一个字符,该字符可以是任意字符,如:aab,abb,acb… |
[list] | 匹配list中的任意单个字符 | a[xyz]b,a与b之间必须但也只能存在一个字符,该字符只能是x或y或z.如:axb,ayb,azb |
[!list] | 匹配除list中以外的任意单个字符 | a[a-z]b,a与b之间必须但也只能存在一个字符,该字符不能是小写字母.如:aAb,a0b… |
[c1-c2] | 匹配c1到c2间的任意单个字符 | a[0-10]b,a与b之间必须但也只能存在一个字符,该字符只能是数字.如:a0b,a1b… |
{string1,string2,…} | 匹配string1,string2中的一个字符串 | a{abc,xyz,opq}b,a与b之间必须但也只能存在一个字符串,字符串只能是abc xyz opq.如:aabcb axyzb aopqb |
\ | 表示转义符 | 让通配符回归本意,只转义其紧接着的后面的字符 |
实例
rm -rf *.tar
touch file{
1..5}
find /var/log/httpd/*.log -mtime +30 |xargs rm -rf
bash中的引号
- 双引号"":弱引用,会把引号的内容当成整体来看待,允许通过$符号引用其他变量值
- 单引号’’:强引用,会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符
- 反撇号``:命令替换,反撇号和 $( ) 一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用
实例
[root@maomao httpd]# a=10;b=20;echo "$a" && echo '$b'
10
$b
# ""包围的a就能引用变量值 而''包围的b就是$b
# ``和$()一样
[root@maomao shell]# echo "运算百分值:`echo "scale=2;2.5*6.1*9.3"|bc`%"
运算百分值:141.82%
[root@maomao shell]# echo "运算百分值:$(echo "scale=2;2.5*6.1*9.3"|bc)%"
运算百分值:141.82%