shell脚本基础编程

24 篇文章 0 订阅
4 篇文章 0 订阅

shell脚本编程

#!/bin/bash
#varibles
nginx_install_doc=/application/nginx
proc=nginx
nginxd=$nginx_install_doc/sbin/nginx
pid_file=$nginx_install_doc/logs/nginx.pid
 
#source function library 调用函数库
if [ -f /etc/init.d/functions ];then
   . /etc/init.d/functions
 else
   echo "not found file /etc/init.d/functions"
   exit
fi
 
#判断pid进程号,以及对应的进程数量是多少
if [ -f $pid_file ];then
   nginx_process_id=`cat $pid_file`
   nginx_process_num=`ps -aux|grep $nginx_process_id|grep -v "grep"|wc -l`
   #除去grep那一条的进程,其余的进程数量
fi
 
#function
 
start () {
  if [ -f $pid_file ]&&[ $nginx_process_num  -ge 1 ];then   #如果pid文件存在并且进程数量大于等于1,则nginx已经启动,不需要再启动
    echo "nginx running..."
  else
     if [ -f $pid_file ]&& [ $nginx_process_num -lt 1 ];then  #如果pid文件存在,但是进程数量小于1,则没有nginx这个进程,需要删除pid文件,并启动nginx
        rm -f $pid_file
      echo "nginx start `daemon $nginxd`"   #第一种启动的写法
      #action "nginx start" daemon $nginxd    #第二种启动的写法
     fi
   echo "nginx start `daemon $nginxd`" 
  fi
}
 
stop () {
  if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
     action "nginx stop" killall -s QUIT $proc  #QUIT是结束进程时会等待该进程的请求执行完,stop是不管是否有请求,直接关闭该进程。
     rm -f $pid_file
  else
     action "nginx stop" killall -s QUIT $proc 2>/dev/null
 fi
}
 
restart (){
  stop
  sleep 1
  start
}
 
reload (){
  if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
     action "nginx reload " killall -s HUP $proc  #如果想要更改配置而不需停止并重新启动服务
  else
     action "nginx reload " killall -s HUP $proc 2>/dev/null
  fi
}
 
status (){
  if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
    echo "nginx is running..."
  else
    echo "nginx is stop..."
  fi
}
 
#callable
case $1 in
start) start;;
stop)  stop;;
restart) restart;;
reload)  reload;;
status)  status;;
*)  echo "usage: $0 start|stop|restart|reload|status"
esac

书写一个shell脚本

#bash解释器
#!/bin/bash  或者  #!/user/bin/env bash
#Author:Chang Xiaolong
#Created Time:2020/07/18 15:08
#Script Description:first shell script

bash -x script.sh #-x表示debug模式,会输出调试信息

运行一个shell脚本

  1. 给运行脚本一个执行该权限
  2. 使用解释器执行脚本 bash xxx.sh

shell重定向

>	重定向输入,覆盖原数据
>>  重定向追加输入,在原数据末尾追加
<	重定向输出	wc -l < /etc/passwd
<<  重定向追加输出 fdisk /dev/sdb << EOF .......EOF

read命令

-p 打印信息
-t 限定时间
-s 不显示
-n 输入字符个数

shell特殊变量

$0 脚本的名字
$* 脚本的参数
$# 传参数量
$$ 脚本进程号
$_ 最后执行的命令

函数语法

函数名(){
	代码块
	return N
}
function 函数名{
	代码块
	return N
}

正则表达式

特殊字符
^ 锚定开头
$ 锚定结尾
同时使用表示精确匹配,单一使用表示模糊匹配
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

shell对文件的操作

#""和''d 的做作用是一样
sed -i 's/原目标字符串/替换后的字符串/g' test.txt
#将home替换成admin
find -type f -name '*.mk' | xargs sed -i "s/home/admin/g" 

sed -i 's:原目标字符串:替换后的字符串:g' test.txt
#将路径/home/admin/替换成$HOME_PATH
find -type f -name '*.mk' | xargs sed -i "s:/home/admin:\$\(HOME_PATH\):g"   
  1. sed命令
    sed是Linux提供的外部命令,是一个行(流)编译器,非交互式的对文件进行增删改查操作。
    文本编译器(vim):对象是整个文件;
    行编译器:对象是文件中给一行;
    在这里插入图片描述在这里插入图片描述
    sed有两种替换修改文件的方式

  2. awk命令
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值