标签: ksh

为什么`if $(true); 然后...... fi`成功了?

灵感来自这个问题:

当条件是命令替换时,如果命令不产生输出,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)

bash ksh zsh sh

22
推荐指数
3
解决办法
6038
查看次数

通过ksh中的一系列整数进行迭代?

如何在ksh中使用for循环遍历一个简单的整数范围?

例如,我的脚本目前正在执行此操作...

for i in 1 2 3 4 5 6 7
do
   #stuff
done
Run Code Online (Sandbox Code Playgroud)

...但是我想将范围扩展到7以上.有更好的语法吗?

shell ksh

21
推荐指数
6
解决办法
5万
查看次数

使用点空间与点斜杠执行文件

我正在尝试使用现有的代码库但遇到了问题.简而言之,我执行一个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语法时才有效.
. …

linux bash shell ksh operators

20
推荐指数
1
解决办法
1万
查看次数

从Java代码返回值

有一个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",为什么代码返回一些值?

java unix shell scripting ksh

19
推荐指数
3
解决办法
3万
查看次数

设置-e和短测试

当我刚接触shell脚本时,我使用了很多简短的测试而不是if语句false && true.

后来我学会了使用set -e,发现我的脚本因某种原因而死了,如果我用完整的if语句替换了短测试,它们就可以工作了.现在,时间已经过去了,我仍然if只使用完整的陈述.

最有趣的是,如果我打开一个交互式shell并执行以下操作:

set -e
false && true
echo $?
Run Code Online (Sandbox Code Playgroud)

它返回1但是shell不会死!

我看到我浪费了太多代码.任何人都可以向我解释如何set -e安全地使用短测试,例如.没有剧本死亡?

bash shell ksh zsh

19
推荐指数
3
解决办法
1万
查看次数

如何在贝壳中获得一年中的一天?

如何在贝壳中获得一年中的这一天

date '+%V'会给我一年中的一周,今天是15; 但我需要找到一年中的哪一天!

linux bash shell ksh

19
推荐指数
2
解决办法
2万
查看次数

Shell脚本输入重定向奇怪

谁能解释这种行为?运行:

#!/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尝试了相同的代码,并从两者中获得了相同的行为.

linux bash shell ksh dash-shell

18
推荐指数
8
解决办法
5361
查看次数

使箭头和删除键在KornShell命令行中起作用

我是Unix新手,正在使用sun solaris(我认为是v10).我把我的shell设置为KornShell(ksh).

我想知道如何在命令行中制作箭头键并删除键工作.我已经设置了-o emacs和退格键,但没有箭头键和删除键.

是否可以设置向上和向下箭头键以循环显示命令行历史记录?

unix shell ksh

18
推荐指数
3
解决办法
5万
查看次数

在Unix Shell脚本中逐行读取文件(带空格) - 问题

我想在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)

我想要包含空格和制表符的行.请建议一个方法.

unix shell ksh

18
推荐指数
2
解决办法
18万
查看次数

ORA-01741:非法的零长度标识符

嗨我在我的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)

sql oracle ksh

17
推荐指数
1
解决办法
7万
查看次数

标签 统计

ksh ×10

shell ×8

bash ×5

linux ×3

unix ×3

zsh ×2

dash-shell ×1

java ×1

operators ×1

oracle ×1

scripting ×1

sh ×1

sql ×1