#! /bin/ksh
awk -F':' '{
if( match($0,":server:APBS") )
{
print x;
x=$0;
}
}' iws_config4.dat
Run Code Online (Sandbox Code Playgroud) 我有以下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目录中是否有多个校验和文件.如果有,我想退出脚本.
我有一个目录,里面有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
我必须和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) 我有一个文件调用"文件",其中有一些字段用分隔符分隔.该文件的结构是:
@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)
如果我想从代码中仅提取第二个字段,我刚刚发布了如何做到这一点?谢谢
当我在终端上输入超过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) 我有一个在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吗?我无法在这台机器上进行调试,因为它是一个客户环境(我无法访问).
在我的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一样在前台运行它?
当在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语句执行之前立即退出?
我正在使用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,依此类推.