关于shell的基础闲谈


一、在shell中,各个括号的作用
1、一对小括号()
在shell 中,使用一对小括号时,shell执行到这里会新开一个子shell去执行,再将执行结果返回当前终端;
2、使用两对小括号(())
该种情况一般都是在进行整形运算是用到,如SUM=$(($NUM1+$NUM2))
并且括号里的$符号可以省略,即为:SUM=$((NUM1+NUM2));


二、一般适用于各种循环语句的情况
1、case语句
case ... in
...)
    echo ...
;;


击键类型识别
遍写服务启停控制脚本


2、for循环语句
for ... in ...
do
   ...
done


打印99乘法表
小贴士:
for i in {1..9};do
下面会自动遍历从1到9,无需i++


i=1
若是while [ $i -ge a $i -le ];do     []内为条件测试,不会实现遍历;
     ......
则下面手动写上:i++


3、if循环语句
if ...
        then ...
elif ...
        then ...
elif ...
        then...
else 
       ....
fi
检测在网段主机之间存活的主机


4、while 循环语句
重复测试某个条件,当条件成立反复执行
while ...
do
       ...
done 


批量添加用户


三、sed的各种简单应用


打印文件所有奇数行
[root@dog ~]# sed -n 'p;n' test.txt           #隔一行打印一行
gd
good
gold
gaad
food
hello
1326010452
6608204540


1、;在sed中代表用;隔开命令
比如:
[root@dog ~]# sed -n '1p;3p' test.txt 
gd
good
执行打印1行和3行的指令,指令之间用;隔开。


[root@dog ~]# sed -n '1,3p' test.txt 
gd
god
good
执行打印1-3行指令,因为有范围,所以用逗号,范围内都执行同一个指令,所以直接接上p,否则若在一定的范围内执行两个指令,要在指令上加{}


例如:
[root@dog ~]# sed -n '1,5{p;n}' test.txt 
gd
good
gold
打印出1到5行所有的奇数行;


输出最后一行:
[root@dog ~]# sed -n '$p' test.txt 
010-66668888


删除空行
[root@dog ~]# sed -i '/^$/d' test.txt    #删除空行,匹配以结尾开头的行,^$


将以IP开头的行前加上#
[root@dog ~]# sed '/^IP/ s/^/#/' test.txt 


在每行行尾加上EOF
[root@dog ~]# sed 's/$/EOF/' test.txt 


替换第二行整行
c整行替换
[root@dog ~]# sed '2cAAAAAAAAA' test.txt 


读取指定文件到行后:
r读取文件到行后
[root@dog ~]# sed '5r /etc/resolv.conf' test.txt


a,追加指定内容到行后
[root@dog ~]# sed '5r /etc/resolv.conf' test.txt


i将指定内容追加到行前
w另存为
H复制
G将剪贴板的内容复制到某行下




四、awk命令简单应用
[root@dog ~]# awk -F:'$2==""{print}' /etc/shadow #输出密码为空的用户


统计当前所有系统用户的用户名、UID、GID、登录的shell制成windows系统中的表格,工作中常用到:
[root@dog ~]# awk -F:'{print $1","$3","}' /etc/passwd >users.csv


当前内存使用率超过85%时报警(取整数部分)
[root@dog ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           988        326        662          0         45        118
-/+ buffers/cache:        161        826 
Swap:         1983          0       1983 
[root@dog ~]# [ $(free -m |awk '/cache:/{print int($3/($3+$4)*100)}') -ge 85 ] && echo "报警!"




过滤出当前shell最近使用对多的前十个命令:
[root@dog ~]# history |awk '{print $2}' |sort |uniq -c |sort -nr |awk 'NR==1,NR==10{print}'
     33 sed
     20 vim
     18 sh
     16 awk
      8 cat
      6 history
      5 ls
      4 rm
      4 ip
      4 chmod
sort:对命令以名称形式进行排序
uniq -c:在每行前加上表示响应行目出现目标的次数
sort -nr:以数字值的大小为排序依据;反向排序



小贴士:
查看分区磁盘占用率:df -hT
[root@dog ~]# df -hT
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_dog-lv_root
                     ext4    18G  3.5G   13G  22% /
tmpfs                tmpfs  495M     0  495M   0% /dev/shm
/dev/sda1            ext4   477M   37M  416M   9% /boot
[root@dog ~]# df -hT |awk '/\/$/{print $(NF-1)}'
22%



查看CPU使用率:mpstat
[root@dog ~]# mpstat
Linux 2.6.32-573.el6.x86_64 (dog) 2017年05月21日 _x86_64_ (1 CPU)


13时26分12秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
13时26分12秒  all    0.03    0.00    0.19    0.45    0.00    0.11    0.00    0.00   99.21
[root@dog ~]# mpstat |awk '/all/{print (100-$NF)}'




内存使用率:free -m
[root@dog ~]# free -m 
             total       used       free     shared    buffers     cached
Mem:           988        329        659          0         46        118
-/+ buffers/cache:        163        824 
Swap:         1983          0       1983 
[root@dog ~]# free -m |awk '/cache:/{print int($3/($3+$4)*100)}'
16















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值