标签: ksh

REDUX:如何克服Linux上的ksh与AIX/Solaris/HPUX上安装的ksh之间的不兼容性?

我发现了另外一个问题,我们正努力将数百个ksh脚本从AIX,Solaris和HPUX移植到Linux.请参阅此处了解上一个问题.

这段代码:

#!/bin/ksh
if [ -a k* ]; then
    echo "Oh yeah!"
else
    echo "No way!"
fi
exit 0
Run Code Online (Sandbox Code Playgroud)

(当在一个名为以k开头的文件的目录中运行时)产生"哦是的!" 当使用AT&T ksh变体(ksh88和ksh93)调用时.另一方面,它产生和错误消息后跟"没办法!" 在其他ksh变种(pdksh,MKS ksh和bash)上.

我的问题再一次是:

  • 是否有一个环境变量会导致pdksh表现得像ksh93?失败了:
  • pdksh上有选项可以获得所需的行为吗?

linux aix ksh solaris hp-ux

2
推荐指数
1
解决办法
804
查看次数

Unix解析管道分隔格式字符串在ksh中

我正在编写ksh脚本来解析管道分隔的字符串

export dummy="abc"  
echo "123|456|789" | awk '{split($0,output,"|"); print output[3] output[2] output[1]}'
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎工作,但我无法将输出值[3]分配给虚拟.

有没有办法进行这样的解析,但是我想将解析结果分配给ksh空间中的变量,即dummy(在上面的示例中)?

unix string shell parsing ksh

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

跨多个 korn (ksh93) shell 脚本(getter-setter)使用的环境变量

我有一组脚本,它们共享一些用作状态标志的环境变量。

考虑:

./script1.sh; ./script2.sh; # I execute 2 scripts within the same shell.

现在,这些脚本中的每一个都会定期执行以下脚本,以设置(刷新)环境变量:

. ./setEnvVariables.sh #This executes it in the context of the current shell and thus making the environment variables accessible across both scripts.

  • setEnvVariables.sh 包含我想在同一 shell 中执行的其他脚本中使用的变量。
  • 其中一些变量充当标志,可以在script1.sh,script2.sh,..脚本执行过程中在文件中手动更改。

另一种方法是将标志保存在文件中并创建典型的获取/设置函数来读取文件并返回/设置标志值。这些标志由我设置以简化对脚本功能的控制。

有没有更好的方法来处理这个问题?这有点属于 getter-setter 设计模式......

unix ksh solaris environment-variables getter-setter

2
推荐指数
1
解决办法
983
查看次数

通过逻辑 && 和 || 表达 If then else

我试图建立使用逻辑 && 和 || 的等效性 运算符到“If then else fi”条件,我想验证这种理解是否正确。考虑这个 if 条件,与我的相关

if ( flag="$value" ) then 
function1 ( p1) 
rc=$?
    if ( "$rc"=0 ) then 
    function2 ( p2)
    fi
elif (flag="$value2" ) then
function1 ( p1) 
rc=$?
    if ( "$rc"=0 ) then 
    function2 ( p2)
    fi
else 
echo "Msg"
fi
Run Code Online (Sandbox Code Playgroud)

用逻辑 && 和 || 编写 作为

 ( ( [ flag = "$value" ] && function1 (p1) ) && function2 (p2) ) || 
   ( ( [ flag = "$value2" ] && …
Run Code Online (Sandbox Code Playgroud)

shell ksh if-statement logical-operators conditional-statements

2
推荐指数
1
解决办法
1084
查看次数

如何在linux中删除awk里面的尾随\n

我有一个像这样的输入文件:

Apr 24 2014;
is;
a;
sample;
;
Jun 24 2014 123;
may 25 2014;
is;
b;
sample;
;
Dec 21 2014 987
Run Code Online (Sandbox Code Playgroud)

...我想要这样的输出:

Apr 24 2014;is;a;sample;;Jun 24 2014 123
may 25 2014;is;b;sample;;Dec 21 2014 987
Run Code Online (Sandbox Code Playgroud)

(我正在使用ksh)

linux awk ksh

2
推荐指数
1
解决办法
196
查看次数

AWK - 从命令行传递生成的字符串作为 awk 的代码

我正在尝试使用awk.

基本上,问题是为什么这个有效:

awk -F';' '{print $3 ";" $4 ";" }' file
Run Code Online (Sandbox Code Playgroud)

但这不会:

awk -F';' '{print '`echo '$3 ";" $4 ";"'`' }' file
Run Code Online (Sandbox Code Playgroud)

我的最终目标是将上述内容封装在一个命令中,以便我能够做到

my_cmd ';' 3 6 7 8 file(s)
Run Code Online (Sandbox Code Playgroud)

它应该显示#3,6,7,8;from分隔的字段file(s)

编辑我的帖子: 我发现我的问题是 echo 当然插入了一个新的行字符,这会导致 awk 出现问题 :o) \c 解决了这个问题,还有一些 \" 转义必须做(见下文)。

awk -F';' '{print '"`echo '$3 \";\" $4 \";\"\c'`"' }' file(s)
Run Code Online (Sandbox Code Playgroud)

现在我只剩下用命令来更改它,该命令将动态生成一个字符串,如 $2 ";' $5 ";' $6 ";' $9 ";"(数字和字段应该是输入)等,它应该在'{print '' }'

感谢 cbuckley,我发现了我的单行命令:(问题已解决)。

cut -d"$1" -f …
Run Code Online (Sandbox Code Playgroud)

unix bash awk ksh

2
推荐指数
1
解决办法
382
查看次数

在shell脚本中以HHmmss格式检查当前时间是否介于两次之间

我有一个主脚本,每10分钟调用doSomeWork.sh.

但条件是doSomeWork.sh不应该在23:30:00到03:00:00之间运行.

我让我的脚本看起来像下面这样.

#!/bin/ksh
prodStartTime="030000"
prodEndTime="233000"

currentTime=`date +"%H%M%S"`
echo $prodStartTime
echo $prodEndTime
echo $currentTime
while true
do
if [[ $currentTime -ge $prodStartTime && $currentTime -le $prodEndTime ]];
then
      ./doSomeWork.sh
else
 echo Do Nothing
fi
sleep 600
done
Run Code Online (Sandbox Code Playgroud)

更新:现在我通过检查生产时间而不是夜间模式时间来查找代码(请参阅编辑历史记录).但看起来我的脚本正在考虑评价中"twalberg"所建议的八进制值.有人可以帮助我如何照顾这些价值观吗?

我只需要一种方法来确保我的脚本在指定的时间跨度之间运行.

unix shell ksh

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

Generate 12 Digit HEX number in KSH

I need to generate 12 digit Hex numbers in KSH on Solaris

Thanks

linux scripting ksh solaris

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

空格作为ksh脚本的参数

假设您有以下脚本:

#!/usr/bin/ksh

for element in $@
    do
            echo $element
done
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令执行脚本:

./myscript.ksh "my element"
Run Code Online (Sandbox Code Playgroud)

预期产量应为:

my element
Run Code Online (Sandbox Code Playgroud)

但是空格被视为每个参数的分隔符,获得:

my
element
Run Code Online (Sandbox Code Playgroud)

我该如何逃离空白?

谢谢

linux whitespace ksh escaping

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

正则表达式和if shell脚本

我的程序启动一些服务并将其输出存储在tmp变量中,如果它以FATAL关键字开头,我想匹配变量的内容吗?如果它包含我将Port in use使用echo命令打印

例如,如果tmp包含FATAL: Exception in startup, exiting.

我可以通过以下方式完成sed:echo $tmp | sed 's/^FATAL.*/"Port in use"/'

但我想使用内置if来匹配模式.如何使用shell内置功能来匹配REGEX?

regex shell ksh sed

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