标签: ksh

为什么这段代码不起作用?

#! /bin/ksh
awk -F':' '{
if( match($0,":server:APBS") )
{
 print x;
 x=$0;
}
}' iws_config4.dat
Run Code Online (Sandbox Code Playgroud)

unix shell awk ksh

0
推荐指数
1
解决办法
94
查看次数

为什么我的脚本报告ls:not found

我有以下korn脚本:

#!/bin/ksh

TAPPDATADIR=/hp/qa02/App/IPHSLDI/Data

echo $TAPPDATADIR

if [[ls $TAPPDATADIR/zip_file_MD5_checksum*.txt | wc -l > 1]]
then
    exit "asdf"
fi
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我得到:

/hp/qa02/App/IPHSLDI/Data
./iftest.ksh: line 7: [[ls: not found
Run Code Online (Sandbox Code Playgroud)

为什么我的if语句不起作用?

我正在尝试查看Data目录中是否有多个校验和文件.如果有,我想退出脚本.

ksh

0
推荐指数
1
解决办法
1294
查看次数

文件命令108k文件:太多Args

我有一个目录,里面有108k文件.我在RHEL5上使用KSH shell

ls *
-dash_bin_ksh: ls: /bin/ls: cannot execute [Argument list too long]
Run Code Online (Sandbox Code Playgroud)

只有看起来有效的命令才是find命令.

find .
file 1
file 2 
file n
Run Code Online (Sandbox Code Playgroud)

我尝试使用find with then exec选项来运行文件命令,但我没有得到任何结果.

find . -exec file {}
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我只想在这个目录中的每个文件上运行file命令并输出到file_output.txt

linux ksh file find

0
推荐指数
1
解决办法
193
查看次数

在KSH中将变量从子项传递给父项

我必须和KSH一起工作(是的,地狱贝壳).我需要使用fork,子程序如下:

    #!/bin/ksh

    PIPE=PIPE_$$
    PIPE_ERR=PIPE_ERR_$$

    export TEST_FILS

    $(. ./LanceFils.ksh 2>${PIPE_ERR} 1>${PIPE}) &
    PID_CHILD=$!
    echo "Nom du fichier PIPE: ${PIPE}"
    echo "Processus fils : " $!
    wait ${PID_CHILD}

    echo "Code retour: " $?
    echo "Sortie standard de PROC_FILS : " $(cat ${PIPE})
    echo "Sortie d'erreur(s) de PROC_FILS : " $(cat ${PIPE_ERR})

    echo "Contenu de TEST_FILS: ${TEST_FILS}"
    rm -rf ${PIPE}
Run Code Online (Sandbox Code Playgroud)

LanceFils.ksh的内容

    #!/bin/ksh

    TIMEOUT=5

    export TEST_FILS

    echo "Je suis le script fils et j'attends ${TIMEOUT} secondes" 
    echo "Nom du pipe du pere ${PIPE}"
    sleep …
Run Code Online (Sandbox Code Playgroud)

variables ksh fork subroutine

0
推荐指数
1
解决办法
3919
查看次数

如何在Unix中使用awk而不使用分隔符从文件中提取字段

我有一个文件调用"文件",其中有一些字段用分隔符分隔.该文件的结构是:

@field1@field2@field3@field4
Run Code Online (Sandbox Code Playgroud)

使用awk我已经提取了没有分隔符的字段.

vr=$file;

sep_mx=`echo $vr | awk '{
    n=split($0,x,"@");
    print n
}'` 
echo $sep_mx
## here the number of substring produced is calc.

while ((i<=$max)); 
do
    # would print individual substring one at a
    # time as the counter increases.
    echo $vr | awk -v er=$i '{
        n=split($0,x,"@"); print x[er]
    }'
    ((i+=1))
done
Run Code Online (Sandbox Code Playgroud)

输出是:

field1
field2
field3
field4
Run Code Online (Sandbox Code Playgroud)

如果我想从代码中仅提取第二个字段,我刚刚发布了如何做到这一点?谢谢

unix shell awk ksh separator

0
推荐指数
1
解决办法
1130
查看次数

KSH错误行26:第41行的语法错误:'done'意外

当我在终端上输入超过1个参数时,继续遇到这个问题:

./learn 1 2

我从while循环中得出结论,但评论的东西没有达到原因.

#!/bin/ksh
#
count=$#

if test $count -lt 1
then
    echo "Enter at least 1 number"
    exit
elif test $count -gt 9
then
    echo "Enter max 9 numbers"
    exit
else
    echo "Parameter check: PASSED"
fi

set -A numbers $@
first=${numbers[0]}

if test $count -eq 1
then
    echo "$first = $first"
    exit
else
    sum=$first
    printf "$first + "
fi

while test "$count" -gt 1
do
    shift
    first=${numbers[0]}
    ((sum = sum + first))
    if test $count -gt 2 …
Run Code Online (Sandbox Code Playgroud)

ksh

0
推荐指数
1
解决办法
2727
查看次数

Shell脚本在ksh中给出错误

我有一个在Bash shell(使用Red Hat Linux)中执行时运行良好的脚本,但是这个脚本ksh在用于执行此脚本的Solaris 10(DB)服务器上失败.该脚本基本上从文件中逐行读取并执行存储过程(在Oracle中).以下是我的脚本:

#/bin/sh

for i in $(cat subscriber.txt); do

        SUBSCRIBER_ID="'$i'"
        sqlplus -s myuser/myuser  <<EOF
        execute delete_learnings($SUBSCRIBER_ID);
        commit;
        EXIT    
EOF
done
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

./removeLearnings.sh: syntax error at line 3: `$' unexpected
Run Code Online (Sandbox Code Playgroud)

知道可能出了什么问题吗?我应该更改脚本ksh吗?我无法在这台机器上进行调试,因为它是一个客户环境(我无法访问).

linux bash shell ksh solaris

0
推荐指数
1
解决办法
98
查看次数

通过Bash逻辑在当前shell中运行管道

在我的Korn shell时代,我可以做以下事情:

#!/bin/ksh

(
    echo a=1
    echo b=2
) |
    while read line
    do
        name=${line%%=*}
        val=${line#*=}
        eval "$name=$val"
        eval "echo $name=\$$name"
    done
echo a=$a
echo b=$b
Run Code Online (Sandbox Code Playgroud)

输出:

a=1
b=2
a=1
b=2
Run Code Online (Sandbox Code Playgroud)

意味着while循环在前台shell中运行.

但是当你在bash中运行它时,你得到:

a=1
b=2
a=
b=
Run Code Online (Sandbox Code Playgroud)

这意味着它在子shell中运行.

我知道其他机制可以获得我想要的特定用法,但是,有没有办法让bash像ksh一样在前台运行它?

bash shell ksh

0
推荐指数
1
解决办法
28
查看次数

如何在脚本中检测DDL语句并退出

当在KSH中针对Linux上的Oracle 11.2.0.4或更高版本的数据库通过SQLPLUS运行脚本时,是否可以检测DDL语句,退出并回滚所有以前的非DDL语句?所以这将是这样的,但增强了停止第一个DDL.

    WHENEVER SQLERROR EXIT ROLLBACK
    @script.sql
Run Code Online (Sandbox Code Playgroud)

有没有办法在PLSQL中设置异常处理,以便在第一个DDL语句执行之前立即退出?

linux oracle ksh plsql sqlplus

0
推荐指数
1
解决办法
145
查看次数

在Korn shell中排队命令

我正在使用AIX Korn shell来执行一个Perl脚本,该脚本接受1到50之间的数字参数并同时在后台运行它们.有没有办法像5那样限制后台进程?如果一个完成,执行下一个.我当前的代码只是在后台执行所有代码.

i=1; while [[ $i -le 50 ]]; do perl some_script.pl $i &; ((i+=1)); done;
Run Code Online (Sandbox Code Playgroud)

例如,如果2结束,则执行下一个6,依此类推.

shell ksh

0
推荐指数
1
解决办法
71
查看次数

标签 统计

ksh ×10

shell ×5

linux ×3

awk ×2

bash ×2

unix ×2

file ×1

find ×1

fork ×1

oracle ×1

plsql ×1

separator ×1

solaris ×1

sqlplus ×1

subroutine ×1

variables ×1