Linux Cut对我来说是个错误,说它';它不是一个文件或目录。我如何使用它来grep for;关于;(见下文)
早上好!我正在努力使工作自动化。因此,在informix框中,运行命令“onstat-gdri”,它会给出以下输出(通常): 我的问题是,在“状态”下,我怎样才能只为开或关而grep 我的问题是,当我使用cut尝试隔离on或off时,会出现一个错误:Linux Cut对我来说是个错误,说它';它不是一个文件或目录。我如何使用它来grep for;关于;(见下文),linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,早上好!我正在努力使工作自动化。因此,在informix框中,运行命令“onstat-gdri”,它会给出以下输出(通常): 我的问题是,在“状态”下,我怎样才能只为开或关而grep 我的问题是,当我使用cut尝试隔离on或off时,会出现一个错误: ./AutoDoc.sh: line 27: } | /usr/bin/cut -c1-2": No such file or directory 这是我的脚本,您可以清楚地看到我在做什么: #!/bin/bash export LANG="C"
./AutoDoc.sh: line 27: } | /usr/bin/cut -c1-2": No such file or directory
这是我的脚本,您可以清楚地看到我在做什么:
#!/bin/bash
export LANG="C"
######## Written by Blake Smreker | b0s00dg | BSmreker@walmart.com ####
######## The goal of this script is to automate DR tickets ############
#Asks for DC number to be used later
printf "What is the four digit DC number?"
read DC
#Asks for 2 lowercase digit country code
printf "What is the two digit lowercase country code?"
read cc
#Defines dsinfx naming convention
infmx=$"dsinfmx.s${DC}.${cc}"
#Defines a variable to call upon the command for DR
onstat=$". /u/data/environment; onstat -g dri | grep -ie last -e type -e primary -e secondary -e ibm"
fred='/usr/bin/dzdo -u oseho /bin/ssh -qo PreferredAuthentications=publickey root@$infmx ". /u/data/environment; /usr/informix/bin/onstat -g dri | /usr/bin/grep -e on -e off | /usr/bin/grep -v informix | /usr/bin/grep -v data | /usr/bin/awk '{print $2}' | /usr/bin/cut -c1-2"'
if [ "$fred" == "on" ]; then
echo "DR is on, please resolve the ticket"
else
#Logs in to the informix box for the defined DC, then runs the above command
echo "Finding the status of DR on the primary and secondary Informix box:"
echo ""
echo "--------------------------------------------------------------------------------------------------------------"
echo ""
/usr/bin/dzdo -u oseho /bin/ssh -qo PreferredAuthentications=publickey root@$infmx $onstat
echo ""
echo "--------------------------------------------------------------------------------------------------------------"
fi
我相信您只需要第二个字段的state值(其命令位于第27行,导致代码段出现问题),可能有很多方法可以解决这个问题,下面是一些可能对您有所帮助的方法 第一种方法:使用
awk
在一行上查找关键字状态,然后设置变量和下一行,它打印第二个字段,这是您的命令的实际状态,然后从命令中出来
your_command | awk '/State/{flag=1;next} flag{print $2;exit}'
第二种方法:使用awk
但由于我们知道状态将始终位于第三行的第二个字段,所以对其进行硬编码并在此处获取
your_command | awk 'FNR==3{print $2}'
第三次进近:使用cut
、head
和tail
尝试你的进近
your_command | head -3 | tail -1 | cut -d" " -f9
附加说明:如果您看到本文@Basile Starynkevitch提到的注释部分,您将看到关于URL mywiki.wooledge.org/BashFAQ/050的内容,其中将向您介绍如何在变量中使用命令来获取其值。如果我们仔细看一下第27行的代码片段,我相信这是因为变量赋值没有正确完成。请尝试阅读此链接,并在努力之后发布您的回复。您的问题应该有一些,但没有。根据经验,信任系统实用程序。您可以使用
#启动shell脚本/bin/bash-vx
以了解更多正在发生的事情。了解。还要阅读您正在使用的实用程序的文档(例如,它们的man
page)。有关切割,请参阅。StackOverflow不是一个在我蹩脚的脚本服务中查找bug的方法。您试图设置fred的尝试似乎假设quotes嵌套。他们没有;您设置的值在第二个撇号后的第一个空格处结束。行的其余部分被解释为一个命令,或者您试图使用反勾号,但您键入的是撇号。无论如何都不推荐使用反勾号;使用$(…)
。(为什么要使用$“…”
strings?)。我来到这里并不是为了让社区“在我的蹩脚脚本中找到bug”。我看到了你是如何理解这一点的,请更多地将其视为一个年轻人,他处于服务器基础设施的地位,正试图学习和改进他们现在制作原始脚本的方式。接下来,我将使用-vx标志来帮助观察它是如何工作的。谢谢:)我认为这并不能完全回答这个问题,除非它显示了如何正确地将其放入变量中;这是导致错误消息的原因。OP应该读@user000001,当然,谢谢你的建议,现在也可以将此链接添加到帖子中。down voter,你能告诉我这里down vote的原因吗?嘿,伙计们,所以我看了所有这些,自然在第三个结束。因此,我将第27行编辑为选项3,下面是它的样子:fred=“/usr/bin/dzdo-u oseho/bin/ssh-qo PreferredAuthentications=publickey root@$infmx”/u/数据/环境/usr/informix/bin/onstat-gdri | head-3 | tail-1 | cut-d”“-f9”“”现在我更改了它,我运行了脚本,仍然得到了这个错误:./AutoDoc1.sh:line 27:}| head-3 | tail-1 | cut d”“-f9:未找到命令我还修复了分配变量fred的问题,因此这不再是问题@RavinderSingh13@b0s00dg,酷如果一切都与脚本和问题修复通常是建议选择任何一个答案作为正确的答案关闭后正确,干杯和愉快的学习在这个伟大的网站上,所以。
your_command | head -3 | tail -1 | cut -d" " -f9