这个问题在这里已经有了答案:Bashsyntaxerror:unexpectedendoffile(21个回答)关闭6年前。当我运行以下代码片段时#!/bin/bashif["foo"="foo"];thenecho"true"elseecho"false"fiecho"end"我明白了sfm_write_buffer_test.sh:line9:syntaxerror:unexpectedendoffile这没有任何意义。echo语句工作正常,但是当遇到if语句时,它会给出上述错误。
目前我有以下创建目录的规则/init/dir:file.recurse:-source:salt://init_dir/init-user:name-group:group-name:/path/init-dir_mode:2775-file_mode:777现在我只想在目录不存在的情况下在新的minions上创建一个目录。 最佳答案 虽然您的示例确实有效,但没有必要。file.directory只会尝试创建不存在的目录。 关于linux-SaltStack:creatingdirect
考虑以下我打算在任何POSIX.1-2004上运行的shell脚本一致的shell。log(){echodebug:"$*"}A=foo:bar:bazIFS=:foriin$Adologtoken">>>>""$i"doneunsetIFS#Domorestuffhere我想遍历以冒号分隔的值。在循环中,我想调用一个日志函数,它应该能够完整地回显传递给它的所有参数,并在每个参数中保留多个空格。当我运行这段代码时,这是我得到的输出。debug:token:>>>>:foodebug:token:>>>>:bardebug:token:>>>>:baz好在">>>>"中的两个空格因为"$
评论说net/if.h是GNUC库的一部分,linux/if.h说它是“TCP/IP的实现LINUX操作系统的协议(protocol)套件。”但是为什么会有两个,每个有什么用呢? 最佳答案 最初,两者都提供了管理网络接口(interface)的数据结构。linux/if.h特别与Linux内核的网络接口(interface)交互有关。实际上,它在文件的开头是这样说的:/**INETAnimplementationoftheTCP/IPprotocolsuitefortheLINUX*operatingsystem.INETisimp
在各种指南和脚本中,我发现人们倾向于使用不同的if语句语法。有什么区别,最佳做法是什么?我相信以下所有语句以及更多变体都将返回true:bar="foo"if["foo"="foo"]if[["foo"==$bar]]if["foo"="$bar"]if[["foo"="$bar"]]if[["foo"-eq$bar]] 最佳答案 据我了解=需要字符串-eq需要整数“$bar”用于字面匹配,即z*可以扩展,但“z*”将字面匹配通配符字符。[]和[[]]的区别在于后者没有分词和路径扩展,而前者有。Plus[[]]允许额外的运算符:&&
无论我的进程是启动还是停止,这个脚本总是返回“正在运行”的原因是什么?ifpsax|grep-vgrep|grep"processName">/dev/nullthenecho$"running"elseecho$"notrunning"fi非常感谢更新:我添加了我的脚本的完整示例,也许其他地方有问题。case"$1"instart)#Startdaemons.echo-n$"Startingdaemon:";;stop)#Stopdaemons.echo-n$"Shuttingdown:"echo;;status)pgrep-f"ProcessName">/dev/nullif[$?
我想了解sh脚本中的ifelse语句。所以我写了下面的代码来找出是否在环境中设置了JAVA_HOME。我写了下面的脚本#!/bin/shif[$JAVA_HOME!=""]thenecho$JAVA_HOMEelseecho"NOJAVAHOMESET"fi这是我对env的输出:sh-3.2$envSHELL=/bin/cshTERM=xtermHOST=estilorSSH_CLIENT=10.15.16.28434822SSH_TTY=/dev/pts/18USER=asimonrajGROUP=ccusersHOSTTYPE=x86_64-linuxPATH=/usr/local
在这个脚本中,我找到了这个if表达式:if[-z$1];thenecho"Usage:createpkg.sh"exitelseCURRENT_VERSION=$1fi我的问题是我找不到这个-z值的确切含义。从回显的内容我可以推断出(也许)$1变量代表软件版本。并且(也许)-z是一个空值。因此,如果我执行脚本而不向它传递我要打包的软件版本,它会向我打印执行脚本的正确过程。但是我不确定-z值的真正含义。 最佳答案 来自mantest:-zSTRINGthelengthofSTRINGiszero所以条件:if[-z$1];then表示
我想知道队列消息是否为空。我按如下方式使用了msg_ctl()它不起作用:structmsqid_dsbuf;intnum_messages;rc=msgctl(msqid,IPC_STAT,&buf);我用过这个peek函数:intpeek_message(intqid,longtype){intresult,length;if((result=msgrcv(qid,NULL,0,type,IPC_NOWAIT))==-1){if(errno==E2BIG)return(1);}return(0);}在这两种情况下,我在向队列发送消息之前和之后得到相同的结果。消息成功进入队列,我已经
我将如何进行如下所示的正则表达式匹配,但在("^This")周围加上引号,就像在现实世界中一样,"This"将是一个可以包含空格的字符串。#!/bin/bashtext="Thisisjustateststring"if[["$text"=~^This]];thenecho"matched"elseecho"notmatched"fi我想做类似的事情if[["$text"=~"^Thisis"]];then但这不匹配。 最佳答案 您可以在空格前使用\。#!/bin/bashtext="Thisisjustateststring"if