灵感来自这个问题:
当条件是命令替换时,如果命令不产生输出,if语句应该做什么?
注意:示例是if $(true); then ...,而不是if true ; then ...
例如,给定:
if $(true) ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
我认为$(true)应该用true命令的输出代替,这没什么.它应该等同于:
if "" ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
打印,no因为没有名称为空字符串的命令,或者这样:
if ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
这是一个语法错误.
但实验表明,如果命令不产生输出,则该if语句将其视为true或false,具体取决于命令的状态,而不是其输出.
这是一个演示行为的脚本:
#!/bin/bash
echo -n 'true: ' ; if true ; then echo yes ; else echo …Run Code Online (Sandbox Code Playgroud) 如何在ksh中使用for循环遍历一个简单的整数范围?
例如,我的脚本目前正在执行此操作...
for i in 1 2 3 4 5 6 7
do
#stuff
done
Run Code Online (Sandbox Code Playgroud)
...但是我想将范围扩展到7以上.有更好的语法吗?
我正在尝试使用现有的代码库但遇到了问题.简而言之,我执行一个shell脚本(让我们称之为这个A),其第一步是调用另一个脚本(B).脚本B在我当前的目录中(我正在使用的程序的要求).该软件的手册参考了bash,但是评论A表明它是在开发的ksh.bash到目前为止我一直在经营.
在内部A,要执行的行B是:
. B
Run Code Online (Sandbox Code Playgroud)
它使用"点空间"语法来调用程序.它没有做任何不寻常的事情sudo.
当我在A没有点空格语法的情况下调用时,即:
./A
Run Code Online (Sandbox Code Playgroud)
它总是错误,说它找不到文件B.我说pwd,ls,whoami,echo $SHELL,和echo $PATH线A调试和确认,B实际上是在那里,脚本与相同的运行$SHELL,因为我在命令提示符下,脚本是相同的用户,因为我,和脚本有$PATH和我一样的搜索路径.我还验证了我是否这样做:
. B
Run Code Online (Sandbox Code Playgroud)
在命令行,它工作得很好.但是,如果我将内部语法更改A为:
./B
Run Code Online (Sandbox Code Playgroud)
相反,然后A成功执行.
同样,如果我执行A与点空间句法,那么这两个. B和./B工作.
总结:
./A仅在A包含./B语法时才有效.
. …
有一个Java类,它创建一个POST请求并将其发送到servlet.类文件(test)的主要方法如下所示:
public static void main(String[] args) throws IOException {
// Code logic goes here...
// No return Statement
}
Run Code Online (Sandbox Code Playgroud)
这是从KornShell(ksh)脚本中调用的,如下所示:
retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}`
if [ $? != "0" ];then
echo "ERROR:
echo "${retcode}"
else
echo "${SCRIPT} Success"
fi
Run Code Online (Sandbox Code Playgroud)
retcode如果代码失败或成功,则始终具有值"2".我的问题是,因为我的main方法的返回类型是"void",为什么代码返回一些值?
当我刚接触shell脚本时,我使用了很多简短的测试而不是if语句false && true.
后来我学会了使用set -e,发现我的脚本因某种原因而死了,如果我用完整的if语句替换了短测试,它们就可以工作了.现在,时间已经过去了,我仍然if只使用完整的陈述.
最有趣的是,如果我打开一个交互式shell并执行以下操作:
set -e
false && true
echo $?
Run Code Online (Sandbox Code Playgroud)
它返回1但是shell不会死!
我看到我浪费了太多代码.任何人都可以向我解释如何set -e安全地使用短测试,例如.没有剧本死亡?
如何在贝壳中获得一年中的这一天?
date '+%V'会给我一年中的一周,今天是15; 但我需要找到一年中的哪一天!
谁能解释这种行为?运行:
#!/bin/sh
echo "hello world" | read var1 var2
echo $var1
echo $var2
Run Code Online (Sandbox Code Playgroud)
导致没有任何输出,而:
#!/bin/sh
echo "hello world" > test.file
read var1 var2 < test.file
echo $var1
echo $var2
Run Code Online (Sandbox Code Playgroud)
产生预期的输出:
hello
world
Run Code Online (Sandbox Code Playgroud)
管道不应该在一步中完成第二个例子中test.file的重定向吗?我用破折号和bash shell尝试了相同的代码,并从两者中获得了相同的行为.
我是Unix新手,正在使用sun solaris(我认为是v10).我把我的shell设置为KornShell(ksh).
我想知道如何在命令行中制作箭头键并删除键工作.我已经设置了-o emacs和退格键,但没有箭头键和删除键.
是否可以设置向上和向下箭头键以循环显示命令行历史记录?
我想在Unix shell脚本中逐行读取文件.行可以包含前导和尾随空格,我想在行中读取这些空格.我尝试了"while read line"但是read命令正在从行中删除空格字符:(如果文件中的行是: -
abcd efghijk
abcdefg hijk
Run Code Online (Sandbox Code Playgroud)
行应该读作: -
1) "abcd efghijk"
2) " abcdefg hijk"
我试过的是这个(没用): -
while read line
do
echo $line
done < file.txt
Run Code Online (Sandbox Code Playgroud)
我想要包含空格和制表符的行.请建议一个方法.
嗨我在我的shell脚本中使用删除查询,我正面临这个问题.
delete from WHITELIST_CLI where filecode like'%Line_Index_condense%';
Run Code Online (Sandbox Code Playgroud)
错误:
ERROR:
ORA-01741: illegal zero-length identifier
Run Code Online (Sandbox Code Playgroud)