专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

“Linux服务批启动”之Shell小结

换行

\n 如:echo “test\n”

继续使用上一行,不换行

\c 如:echo “test\c”

批量执行sh

如需批量执行多个sh文件,可直接将多个文件路径写入即可 如: /opt/soft/apache-tomcat-8.5.12/bin/startup.sh /opt/soft/apache-tomcat-8.0.30/bin/startup.sh

服务批启动示例分析

#!/bin/sh
echo " "
echo ">>>>>>>>>>>>shell is doing【make by ran.chunlin】>>>>>>>>>>>>"
echo " "
/opt/soft/confluence/bin/begin-confluence.sh
while true;do
    process=`ps -ef|grep tomcat|grep -v grep`
    if [ "$?" == "0" ]
    then
        echo "【Print】confluence was started";
        break;
    else
        echo "【Print】please wait,confluence is starting……";
    fi
sleep 2s
done
/opt/soft/apache-tomcat-8.5.12/bin/startup.sh
/opt/soft/apache-tomcat-8.0.30/bin/startup.sh
svnserve -d -r /data/svn
/usr/local/nginx/sbin/nginx
echo " "
echo ">>>>>>>>>>>>shell was done【make byran.chunlin】>>>>>>>>>>>>"
echo " "

以上是我写的一个linux服务批启动的shell(对于Confluence的一个优先启动,确保confluence启动成功后再启动其他服务)。以下是解释:

  • \#! /bin/sh 是指此脚本使用/bin/sh来解释执行
  • true 表示条件
  • process= 表示将命令执行的结果数用process接收,如果不接受也可以直接使用命令:ps -ef|grep tomcat|grep -v grep
  • $? 意思参照如下:

| 变量 | 含 义 | | :———— | :———— | | 62_1.pngn | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是62_2.png# | 传递给脚本或函数的参数个数 | | 62_3.png@ | 传递给脚本或函数的所有参数。被双引号(” “)包含时,与 62_4.png? | 上个命令的退出状态,或函数的返回值 | | $$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID | 当然也可以使用$process来表示申明的process变量。

  • if [ 之间需要一个空格,否则报错,[]与条件直接也需要一个空格。
  • sleep 表示睡眠: sleep 1 睡眠1秒 sleep 1s 睡眠1秒 sleep 1m 睡眠1分 sleep 1h 睡眠1小时

杀掉死循环的shell

使用ps aux|grep ”脚本名“这种方式查找并kill

级联调用shell,不输出信息

如果当前shell会执行另一个shell(或者系统命令),而另一个shell会输出信息,而我们又不想输出另一个shell的信息,那么,我们可以使用一个变量接收执行的返回结果就可以了,这样也不会输出另一个shell的信息,如,执行ps -ef|grep tomcat|grep -v grep会输出信息,那么使用count=’ps -ef|grep tomcat|grep -v grep’就不会了。注意两者写法差异:

count=`ps -ef|grep tomcat|grep -v grep`
if [ "$?" = "0" ]

`ps -ef|grep tomcat|grep -v grep`
if [ $? -eq 0 ]

shell中的0

shell中0表示不存在,而“0”表示数字0

shell中的 `

当前时间:date '+%Y-%m-%d %H:%M:%S' 注意:符合“`”为数字键1上的那个键,一般命令都是使用该符号包裹

-eq和=的区别

-eq 和 = 都可以用来条件测试进行判断两个操作对象是否相同,但是有如下区别: -eq 适用于整数数字,不能进行字符串的条件测试 = 既适用于数字,又适用于字符串

批量执行后面跟有附属文件的sh文件的shell

形如:

/usr/local/redis-cluster/7001/bin/redis-server /usr/local/redis-cluster/7001/conf/redis.conf
/usr/local/redis-cluster/7002/bin/redis-server /usr/local/redis-cluster/7002/conf/redis.conf

批量启动redis,是不能成功的(如果没有后面的conf,单纯的sh文件倒是可以成功)。 因此,可改为:

cd /usr/local/redis-cluster/7001/
bin/redis-server conf/redis.conf
cd /usr/local/redis-cluster/7002/
bin/redis-server conf/redis.conf

文章永久链接:https://tech.souyunku.com/19462

未经允许不得转载:搜云库技术团队 » “Linux服务批启动”之Shell小结

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们