从另一个shell脚本执行shell脚本并将关键字作为参数

时间:2017-09-20 10:35:28

标签: linux bash shell

我编写了一个脚本文件来检查磁盘上的可用空间。如果使用的空间高于阈值,我希望重新启动该服务器上的应用程序。

以下是我编写的代码。

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=60
echo $CURRENT
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "inside"
    sudo ./script2.sh stop
    sudo ./script2.sh start
fi

script2.shstart|stop作为参数。

直接从终端执行的命令sudo ./script2.sh stopsudo ./script2.sh start可以正确执行。

第一个命令sudo ./script2.sh stop未执行。我猜是因为stop是linux中的一个关键字,因此导致了这个问题。

第二个命令sudo ./script2.sh start执行(但由于第一个脚本没有执行,因此提供“地址已在使用中”错误。)

我知道我可能不得不将参数值从start改为其他东西,但有没有解决方案将stop作为参数传递给脚本?

1 个答案:

答案 0 :(得分:1)

尝试使用root权限实例化shell并在其中运行脚本:

#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=60
echo $CURRENT
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "inside"
    sudo bash -c  './script2.sh stop'
    sudo bash -c  './script2.sh start'
fi

这也可以在一行中完成..类似于sudo bash -c './script2.sh stop; ./script2.sh start'.

另请注意,您没有在第一行指定shell,使用像#!/ bin / bash这样的shebang或者您使用的任何shell