Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

6
陷阱,ERR和回显错误行
我正在尝试使用陷阱创建一些错误报告,以针对所有错误调用函数: Trap "_func" ERR 是否有可能获得发送ERR信号的线路?外壳是bash。 如果这样做,我可以阅读和报告使用了什么命令,并记录/执行一些操作。 或者,也许我错了吗? 我测试了以下内容: #!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf" 并$LINENO返回2。不起作用。

5
检查$ REPLY是否在数字范围内
我正在使用Bash编写Linux的外壳脚本,以将任何视频文件转换为MP4。为此,我使用avconvwith libvorbis进行音频。 在我的脚本中,我对用户有一个问题: read -p "- Audio Quality [scale from -2 to 10] ? " if [ -n "$REPLY" ] ; then ABITRATE="-aq $REPLY" fi 我的“ ABITRATE”字符串进入最终的avconv命令行。 但我想让用户有机会用Kb(千比特)的值来回答这个问题,并将其转换为libvorbis使用的标度。“从-2到10的比例”是这样的: Quality Kbit/s Normalization ----------------------------- -2 ~32 y -1 ~48 y 0 ~64 y 1 ~80 y 2 ~96 y 3 ~112 y …


1
bash case语句可以级联吗?
我正在尝试做这样的事情: case $level in 3) echo "Level Three" 2) echo "Level Two" 1) echo "Level one" ;; esac 如果$ level = 3,它将输出 Level Three Level Two Level One 而如果$ level = 1,则仅输出 Level One 但是当我尝试它时,syntax error near unexpected token ')'由于没有包含,我得到了错误;;。 我知道的所有其他语言都允许这样做,有没有办法在bash中做到这一点?某种关键字的含义是“现在继续进行下一种情况,就好像它匹配了”?



7
可移植的方式来获取脚本的绝对路径?
(zsh)脚本确定其绝对路径的可移植方式是什么? 在Linux上,我使用类似 mypath=$(readlink -f $0) ...但这不是便携式的。(例如,readlink在darwin上,该-f标志无法识别,也没有任何等效的标志。)(当然,readlink为此使用的是一个相当晦涩的hack。) 有什么更便携的方式?

4
Bash Shell脚本输出对齐
我的剧本: date echo -e "${YELLOW}Network check${NC}\n\n" while read hostname do ping -c 1 "$hostname" > /dev/null 2>&1 && echo -e "Network $hostname : ${GREEN}Online${NC}" || echo -e "${GRAY}Network $hostname${NC} : ${RED}Offline${NC}" done < list.txt sleep 30 clear done 正在输出这样的信息: Network 10.x.xx.xxx : Online Network 10.x.xx.xxx : Offline Network 10.x.xx.xxx : …

4
如何在RAM中制作一个临时文件?
我有一个脚本,会将其输出传递给|tee scriptnameYYMMDD.txt。在生成输出的for循环的每个循环之后,我将使用反转文件内容,tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt以便在浏览器窗口中以最新行显示日志输出。 我将有几个脚本并行执行此操作。我正在尝试最小化磁盘活动,因此输出|tee scriptnameYYYYMMDD.txt到RAMdisk最好。mktemp在/tmp文件夹中创建一个文件,但该文件似乎不在磁盘上。

3
使用sed为solaris上的命令的输出着色
我有一个必须在linux和solaris上都可以使用的ksh脚本。我正在尝试为特定命令的输出着色。它可以在Linux(特别是RHEL6)上运行,但不能在solaris(SunOS 5.10)上运行。 在Linux上的命令(输出“测试”正确地显示为红色): [amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,' test 关于so​​laris的命令(输出“ test”未着色): [amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,' x1B[31mtestx1B[0m 有没有办法制作此命令,使输出为红色,而输出中没有原始代码?我不能更改'echo'命令,因为这只是我实际运行的命令的填充。

3
`{{(出口1); 1号出口;}; }`是什么意思?
我引用了config.status产生的下一个代码段configure。 if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi 在代码段中,该怎么{ (exit 1); exit 1; };做?仅exit在子外壳中执行操作的目的是什么?

11
为什么Shell无法自动修复“猫的无用使用”?[关闭]
很多人使用单行代码和包含代码的脚本 cat "$MYFILE" | command1 | command2 > "$OUTPUT" 第cat一种通常称为“猫的无用使用”,因为从技术上讲,它需要启动一个新进程(通常是/usr/bin/cat),如果已经执行了该命令,则可以避免这种情况 < "$MYFILE" command1 | command2 > "$OUTPUT" 因为shell只需启动command1,只需将其stdin指向给定文件即可。 Shell为什么不自动执行此转换?我觉得“猫的无用使用”语法更容易阅读,shell应该有足够的信息来自动摆脱无用的cat。的cat是在POSIX标准定义,因此壳应该允许执行它在内部,而不是在路径使用二进制的。Shell甚至可以只包含一个参数版本的实现,并在路径中回退到二进制。

5
为什么我需要将“ do”与“ for”放在同一行?
1.总结 我不明白,为什么我需要E010打击规则。 2.细节 我用bashate了掉毛.sh的文件。E010规则: 这样做不是在同一行的 for 打击 正确: #!/bin/bash for f in bash/*.sh; do sashacommand "$f" done 错误: #!/bin/bash for f in bash/*.sh do sashacommand "$f" done 是否有任何有效的论据,为什么我需要for并do在同一行? 3.没用 我在以下位置找不到我的问题的答案: 谷歌 有关最佳编码实践的文章(示例) bashate文档。我只找到: 一组有助于使控制块中的内容保持一致的规则。这些在连续的长行中被忽略,因为展开是一种“有趣的”

1
&&和||之后的bash行继续在哪里 有记载吗?
我已经在脚本中看过很多这种结构,并且自己使用过,但是令我感到困扰的是,我似乎在文档中找不到它。 例: [ -f file1 ] && [ -f file2 ] && echo "Both files exist." || echo "One or the other file doesn't exist." 也可以在换行符之前用反斜杠来完成,如man bash: If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, it …

4
Shell函数中局部变量的范围
看完24.2。局部变量,我认为var使用关键字声明变量local意味着var仅在函数的花括号分隔的代码块中可以访问的值。 但是,在运行以下示例之后,我发现var也可以从该代码块调用的函数中进行访问,读取和写入-即,即使var被声明local为outerFunc,innerFunc也仍然可以读取和更改其值。 Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" 输出: global: before outerFunc: [var:] …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.