我想写这样的代码: command="some command" safeRunCommand $command safeRunCommand() { cmnd=$1 $($cmnd) if [ $? != 0 ]; then printf "Error when executing command: '$command'" exit $ERROR_CODE fi } 但是这个代码不能按我想要的方式工作。 我犯了什么错误?
我确信有一个简单而快速的方法来计算Unix系统上一列值的总和(可能使用类似awk或xargs ),但编写一个shell脚本来逐行parsing行是唯一的现在想起来了。 例如,修改下面的命令以计算并显示SEGSZ列(70300)的总数的最简单方法是什么? ipcs -mb | head -6 IPC status from /dev/kmem as of Mon Nov 17 08:58:17 2008 T ID KEY MODE OWNER GROUP SEGSZ Shared Memory: m 0 0x411c322e –rw-rw-rw- root root 348 m 1 0x4e0c0002 –rw-rw-rw- root root 61760 m 2 0x412013f5 –rw-rw-rw- root root 8192
我有两个文件( file1.txt和file2.txt ),文件只是例子。 如何合并这两个文件,以创build文件 – merge_files.txt作为例子3 我现在写ksh脚本,所以合并可以用ksh,awk,sed,perl,one liner等来完成 背景 – 为什么我需要合并文件:我的目标是将旧文件 (存在于第一个字段中)重命名为NEW文件 (存在于第二个字段中), 例1 more file1.txt /etc/port1-192.9.200.1-255.555.255.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port5-192.9.200.1-255.555.255.0 . . . . 例题 more file2.txt /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . 示例3 more merge_files.txt /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . . […]
我对nix并不陌生,但最近我在提示中花了很多时间。 我的问题是使用KornShell(ksh)或Bash Shell的优点是什么? 使用一个在另一个之上的陷阱在哪里? 从用户的angular度来看待理解,而不是单纯的脚本。
我只是想了解shell中的以下代码行。 它用于获取当前的工作目录。 我知道$(variable)名称返回variables名称内的值,但$(command)应该返回什么? 它执行命令后是否返回值? 在这种情况下,我们可以使用`来执行命令。 CWD="$(cd "$(dirname $0)"; pwd)" 在不同版本的shell中,也可以从以下代码行获取相同的输出 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 我无法理解$(cd..和$(dirname的含义。 有谁能帮我弄清楚这个命令是如何执行的?
我的命令的输出是这样的: 1540 "AB" 6 "C" 119 "D" 第一列总是一个数字,后跟一个空格,然后是一个双引号的string。 我的目的是只得到第二列,如: "AB" "C" "D" 我打算使用<some_command> | awk '{print $2}' <some_command> | awk '{print $2}'来完成这个任务。 但问题是,第二列中的某些值包含空格,这恰好是awk分隔字段的默认分隔符。 因此,输出是混乱的: "A "C" "D" 我怎么得到第二列的价值(与配对报价)干净?
我有一个ksh脚本,返回一个很长的值列表,换行符分隔,我想只看到唯一/不同值。 有可能做到这一点? 例如,假设我的输出是目录中的文件后缀: tar gz java gz java tar class class 我想看到一个像这样的列表: tar gz java class
我正在编写一个shell脚本,以便在AIX上的KornShell(ksh)下运行。 我想使用mkdir命令来创build一个目录。 但目录可能已经存在,在这种情况下,我不想做任何事情。 因此,我想要testing以查看该目录不存在,或者抑制mkdir在尝试创build现有目录时抛出的“文件存在”错误。 任何想法如何最好地做到这一点?
我有一个脚本,我不希望它调用exit如果它是来源。 最初,我虽然检查$0 == bash但如果脚本来自另一个脚本,或者如果用户从ksh源它,这有问题。 是否有一个可靠的方法来检测脚本是否来源?
在sh / ksh / bash中将一个命令的输出作为一个variables来存储,你也可以这样做 MY_VAR=$(command) #or you can do MY_VAR=`command` 两种方法之间有什么区别?