shell脚本常⽤命令(⼲货)
shell脚本常⽤命令⼩结(纯⼲货)
本⽂适合初学者快速⼊门
新建⼀个后缀名为.sh的⽂件就可以开启shell脚本之旅了
shell脚本的⾸⾏要这样写:#!/usr/bin/bash
或者可以写成:#!/usr/bin/env bash
#!/usr/bin/env bash的
优点:
1.⽤户不需要去寻程序在系统中的位置(因为在不同的系统,命令或程序存放的位置可能不同),只要程序在你的$PATH中;
2.它会根据你的环境寻并运⾏默认的版本,提供灵活性。(保存⽤户信息的⽂件/etc/passwd)
缺点:
有可能在⼀个多⽤户的系统中,别⼈在你的$PATH中放置了⼀个bash,可能出现错误。
⼤部分情况下,/usr/bin/env是优先选择的,因为它提供了灵活性,特别是你想在不同的版本下运⾏这个脚本;⽽指定具体位置的⽅式
#!/usr/bin/bash,在某些情况下更安全,因为它限制了代码注⼊的可能。
常⽤命令
echo是⽐较常⽤的shell脚本的命令,⽤来输出⼀段字符串
#!/bin/bash
echo "Hello World !"
shell代码
2.eval
eval可以⽤来执⾏⼀段linux命令,⽤shell脚本来执⾏Linux
命令,eval不可或缺
⽐如:⽤脚本来实现监测服务器上服务的运⾏状态
应⽤实例
我做的这个功能不仅要进⾏监测,还要去判断当前服务器的操作系统类型,根据不同的操作系统执⾏相应的linux命令,因为不同系统能使⽤的Linux命令也不同,项⽬在不同系统上的服务名称都不⼀样,这个功能调⽤公司写好的⼀个⽅法就可以实现了,我就只拿出监测服务器上的服务运⾏状态,如果服务未启动或异常关闭,⾃动重新启动的⼀个脚本(需要设定定时任务来定时运⾏这个脚本来监测)
#!/usr/bin/env bash
result=$(eval "systemctl status rabbitmq-server.service")
active="active (running)"
if [[ $result == *$active* ]]
then
echo "rabbitmq has started"
else
eval "systemctl start rabbitmq-server.service"
echo "rabbitmq start succeed"
fi
这段代码对于初学者来说就可以说明很多脚本的常见写法了
1.$
$⽤来取值,这⾥要注意,需要取的是执⾏命令后的返回结果,需要加上括号
2.if else
这⾥的if else⽤来做判断,需要注意的是在判断条件中的==两边都要有空格,如果没有空格会导致判断结果⼀直为true,这⾥⼜涉及到了判断⼀个字符串是否包含另⼀个字符串,⽅式有很多,这⾥不过多介绍,就说以下这三种:
a.⽤字符串运算符
strA="chenglong"
strB="eng"
if [[ $strA =~ $strB ]]
then
echo "包含"
else
echo "不包含"
fi
b.⽤通配符*,也就是上⾯例⼦中⽤到的⽅式
A="chenglong"
B="eng"
if [[ $A == *$B* ]]
then
echo "包含"
else
echo "不包含"
fi
c.⽤case in语句
thisString="a b c d e" # 源字符串
searchString="a b" # 搜索字符串
case $thisString in
*"$searchString"*) echo Enemy Spot ;;
*) echo nope ;;
esa
3.sed -i
sed命令的语法有很多种,我这次只⽤到了sed -i,就先只介绍这⼀种吧
sed -i就是⽤来操作⽂本⽂件的
sed -i 's/原字符串/新字符串/' /
sed -i 's/原字符串/新字符串/g' /
这是⽂件的内容:
#
s
ssss
这是执⾏这两条命令的结果
sed -i 's/d/886/' /
执⾏结果
886
886sss
sed -i 's/d/886/g' /
执⾏结果
886
886886886886
去掉 “⾏⾸” 带“¥”的⾸个字符¥
sed -i 's/^¥//' file
特定字符串的⾏前插⼊新⾏
sed -i '/特定字符串/i 新⾏字符串' file
特定字符串的⾏后插⼊新⾏
sed -i '/特定字符串/a 新⾏字符串' file
实例:
sed -i '/Service/a Restart=always' /usr/lib/systemd/system/rabbitmq-server.service
这段代码就是在 /usr/lib/systemd/system/rabbitmq-server.service这个⽂件中查“Service”,并在这个特定字符串之后新增⼀⾏“Restart=always”,这⾥需要注意,实际上rabbitmq-server.service⽂件中的特定字符串是[Service],如果脚本中也输⼊[Service],会造成执⾏脚本后,rabbitmq-server.service⽂件中原来的每⼀⾏下⾯都增加了⼀⾏Restart=always。
特定字符串的删除
sed -i '/字符串/d' file
暂时先总结到这!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。