我有一个脚本,如下所示......
顶部的一些函数定义,其中之一是......
function err_out
{
trap 'echo "ERROR in $STEP function. EXITING!";exit 1' ERR
#some more messages
exit 1
}
# Main program starts here
trap 'err_out' ERR
#do something
#call some functions
#call cleanup function
#end of script
Run Code Online (Sandbox Code Playgroud)
当函数中发生一些错误时,它们不会传播,并且 err_out 函数不会被调用。
我也尝试过#!/bin/bash -E;这样,当出现错误时,脚本会退出,但我需要的是将错误正确传播到处理程序。
我有一个文件文件夹,我想在第 5 个位置更改其中一个字符的大小写。
由此:
ABC-xyz
DEF-xyz
GHI-xys
Run Code Online (Sandbox Code Playgroud)
对此:
ABC-Xyz
DEF-Xyz
GHI-Xys
Run Code Online (Sandbox Code Playgroud)
您会注意到 X 已转换为大写。
任何想法我如何在 Bash 中做到这一点?
我想每x分钟抓取相同的图像(来自网站)以最终制作延时视频。
我的问题是:
最好使用 Python 之类的东西吗?
我对 shell 脚本知之甚少,但不幸的是我必须编写一个。我想问一下bash脚本迭代移动文件,我需要移动按月排序的日志文件,这些文件将由cronjob执行。计划是将 mtime +30(1 个月前)文件移动到几个文件夹中,cronjob 将每天执行,例如:
/home/Work/LogFiles/20131200012.log
/home/Work/LogFiles/thisLogIsDifferent.log
/home/Work/LogFiles/20120322222.log
/home/Work/LogFiles/20140100011.log
/home/Work/LogFiles/thisLogIsDifferent2.log
Run Code Online (Sandbox Code Playgroud)
/home/Work/LogFiles/thisLogIsDifferent.log
/home/Work/LogFiles/thisLogIsDifferent2.log
/home/Work/LogFiles/2013/DEC/20131200012.log
/home/Work/LogFiles/2012/MAR/20120322222.log
/home/Work/LogFiles/2014/JAN/20140100011.log
Run Code Online (Sandbox Code Playgroud)
我对我必须使用的方法一无所知。所以这是我糟糕的 shell 脚本:
BASE_DIR=/home/Work/LogFiles
REPORT_DIR_YEAR=$BASE_DIR/`date +%Y`
REPORT_DIR=$REPORT_DIR_YEAR/`date +%b`
NOW=$(date +"%Y%m")
if ! [ -d $REPORT_DIR_YEAR ]; then
mkdir $REPORT_DIR_YEAR
if ! [ -d $REPORT_DIR ]; then
mkdir $REPORT_DIR
fi
fi
#THIS PART NEED TO BE RE-ARRANGED
#What I expect is not date=NOW; BUT SOME KIND LIKE date %m-1? but I still don't have any ideas about modify date function.
for file …Run Code Online (Sandbox Code Playgroud) 我编写了一个简单的 shell 脚本来关闭 ubuntu 服务器。然后我创建了一个 cron 作业来每天 23:59 执行这个脚本。
#!/bin/bash
sudo shutdown -h now
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)
当我从代码中删除 sudo 时,我收到了不同的错误消息:
/home/qinking126/scripts/test.sh: line 3: shutdown: command not found
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我有一台 Ubuntu 服务器,需要在其上始终运行 Virtualbox 虚拟机。VM 由VMAdmin没有管理员权限的特定用户管理。我需要创建一个 init.d 脚本来处理我的虚拟机 VM。
这应该:
我需要设置一个 CRON 作业来安排
每个月的第一个和第三个星期一。
我使用Plesk控制面板进行如下设置。

目前 CRON 运行成功,但是每周一。这不是我的要求。
还提到了此链接/sf/ask/817837121/ 然后 CRON 在 1-7,15-21 上运行十四次。
有人知道解决办法吗?
我正在使用 Windows NT(ish) shell 脚本语言编写一个 shell 脚本。(我的电脑装有 Windows 10。)我想检查两个文本文件是否相同。如果文件相同,我希望我的脚本做一件事。如果文件不相同,我希望我的脚本执行其他操作。脚本不应暂停以要求手动输入更多数据。
“类似问题”列表有关于 Macintosh 和 bash shell 脚本的问题。它还有一个关于运行fc或comp从命令行的答案,提供详细的输出。不幸的是,fc不会向 返回结果%errorlevel%,并comp要求手动输入数据而不是简单地退出。
我有一份 Tim Hill 关于 Windows NT shell 脚本的书。Page 216 有以下代码行, where%D1%和%D2%是目录,但我不知道如何修改它以仅处理一对文件:
for /f "tokens=*" %%I in ('fc /b %D1%\*.* %D2%\*.* ^| find /v "Comparing" ^| find /v "FC: no*"') do (set /a ERRORS+=1) & (echo %%I)
Run Code Online (Sandbox Code Playgroud) 我以这种方式通过 ssh 执行脚本:
ssh user@host 'bash -s' < ./script.sh
Run Code Online (Sandbox Code Playgroud)
问题是,有时,我得到的输出不正确,行是混合的。
在我的情况下,脚本执行不是很新,正常输出是这样的:
...
Note: Ignoring non-mail file: foobar
Note: Ignoring non-mail file: foobar
Note: Ignoring non-mail file: foobar
Processed 93 total files in almost no time.
No new mail.
Run Code Online (Sandbox Code Playgroud)
但有时输出是这样的:
...
Note: Ignoring non-mail file: foobar
Note: Ignoring non-mail file: foobar
Processed 93 total files in almost no time.
No new mail.
Note: Ignoring non-mail file: foobar
Note: Ignoring non-mail file: foobar
Run Code Online (Sandbox Code Playgroud)
并且可以肯定这不是来自 的真正输出notmuch new,该命令以 结尾,No new mail …
在 shell 脚本中并行运行命令通常非常有帮助,但我找不到这样做的方法。这可能吗?如果是这样,我将如何实现这一目标?我主要有兴趣为fish.
当我运行的命令需要很长时间才能完成但可以或需要同时运行以减少完成所有操作所需的时间时,它很有用。
shell-script ×10
bash ×4
linux ×4
ubuntu ×2
cron ×1
fish ×1
plesk ×1
script ×1
shell ×1
ssh ×1
ubuntu-12.04 ×1
virtualbox ×1
windows ×1