cron 在运行程序时是否设置了任何变量?如果脚本是由cron运行的,我想跳过一些部分;否则调用这些部分。
我如何知道 Bash 脚本是否由 cron 启动?
输入/usr/bin/env sed -f终端工作。
但如果将其用作shebang,
#!/usr/bin/env sed -f
s/a/b/
Run Code Online (Sandbox Code Playgroud)
脚本将无法执行:
/usr/bin/env: sed -f: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我有点相信它与-f有关。但是如何解决这个问题呢?
如果这是一个重复的问题,我提前道歉。在问这里之前,我确实努力搜索/检查。
我很乐意写这样的单行代码:
foocommand && foocommand2 && foocommand3
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果前一个命令“成功”,我只希望后续命令运行。
我正在编写一个有点冗长的脚本,这个单行代码是不可行的,因为它看起来像是一大块令人困惑的代码。
我想在脚本中将命令隔开并在它们之间写注释。我怎样才能做到这一点,并且在那里仍然有相当于 && 的东西?
在使用set -e( errexit), set -u( nounset) 以及 ERR 和 EXIT 陷阱时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。
set -u不触发 ERR 陷阱代码:
#!/bin/bash
trap 'echo "ERR (rc: $?)"' ERR
set -u
echo ${UNSET_VAR}
Run Code Online (Sandbox Code Playgroud)set -e不会改变结果set -eu在 EXIT 陷阱中使用退出代码是 0 而不是 1代码:
#!/bin/bash
trap 'echo "EXIT (rc: $?)"' EXIT
set -eu
echo ${UNSET_VAR}
Run Code Online (Sandbox Code Playgroud)set …我有一个操作cut,我想将结果分配给一个变量
var4=echo ztemp.xml |cut -f1 -d '.'
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ztemp.xml 不是命令
var4never的值被赋值;我正在尝试为其分配以下输出:
echo ztemp.xml | cut -f1 -d '.'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我运行以下脚本:
VAR="Test"
sh -c 'echo "Hello $VAR"'
Run Code Online (Sandbox Code Playgroud)
但我得到:
# ./test.sh
Hello
Run Code Online (Sandbox Code Playgroud)
如何将VAR我的脚本变量发送到使用sh -c '...'.
我有一个包含崩溃日志的目录,我想在基于 find 命令的 bash 脚本中使用条件语句。
日志文件以这种格式存储:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Run Code Online (Sandbox Code Playgroud)
我希望 if 语句仅在特定应用程序的崩溃日志在过去 5 分钟内被修改时才返回 true。find我会使用的命令是:
find /var/log/crashes -name app-\*\.log -mmin -5
Run Code Online (Sandbox Code Playgroud)
我不确定如何将其if正确地合并到声明中。我认为这可能有效:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Run Code Online (Sandbox Code Playgroud)
有几个地方我不清楚:
test指令,还是应该直接针对 find 命令的结果进行处理,或者可能用于find... | wc -l获取行数?test为了测试命令返回的返回码?而且它们有点不可见 - 在stdout/之外stderr?我阅读了该man页面,但我仍然不清楚何时使用test以及如何调试它。我被要求编写一个 shell 脚本来检查我的项目的 URL 是否已启动/工作。
我试图在互联网上找到一些提示,但我得到的都是关于检查 URL 是否存在。
我第一次尝试使用wget.
wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^ /'
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi
Run Code Online (Sandbox Code Playgroud)
我的下一次尝试是使用curl.
curl -ivs https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html#
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi
Run Code Online (Sandbox Code Playgroud)
但是,两者都在检查 URL 的存在而不是响应。
如何从第 1 列中找到最大值并从包含 n 条记录的文件中回显相应的路径位置。
$ cat version.log
112030 /opt/oracle/app/oracle/product/11.2.0
121010 /opt/oracle/app/oracle/product/12.1.0
Run Code Online (Sandbox Code Playgroud)
预期输出:
/opt/oracle/app/oracle/product/12.1.0
Run Code Online (Sandbox Code Playgroud) 我想在分离的屏幕中运行 bash 脚本。该脚本多次调用程序,每次都需要等待太长时间。我的第一个想法是简单地打开一个屏幕,然后调用脚本,但似乎ctrl-a d在脚本运行时我无法分离 (by )。所以我做了一些研究,发现这个指令用以下内容替换了shebang:
#!/usr/bin/screen -d -m -S screenName /bin/bash
Run Code Online (Sandbox Code Playgroud)
但这也不起作用(无法识别选项)。有什么建议?
PS 我刚刚想到screen -dmS name ./script.sh这可能对我的目的有用,但我仍然很好奇如何将它合并到脚本中。谢谢你。
scripting ×10
shell-script ×7
bash ×5
shell ×4
centos ×1
command-line ×1
coreutils ×1
cron ×1
env ×1
executable ×1
find ×1
gnu-screen ×1
ksh ×1
parameter ×1
sed ×1
shebang ×1
test ×1
trap ×1
variable ×1