我发现了另外一个问题,我们正努力将数百个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)上.
我的问题再一次是:
我正在编写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(在上面的示例中)?
我有一组脚本,它们共享一些用作状态标志的环境变量。
考虑:
./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.
script1.sh,script2.sh,..脚本执行过程中在文件中手动更改。另一种方法是将标志保存在文件中并创建典型的获取/设置函数来读取文件并返回/设置标志值。这些标志由我设置以简化对脚本功能的控制。
有没有更好的方法来处理这个问题?这有点属于 getter-setter 设计模式......
我试图建立使用逻辑 && 和 || 的等效性 运算符到“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
我有一个像这样的输入文件:
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)
我正在尝试使用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) 我有一个主脚本,每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"所建议的八进制值.有人可以帮助我如何照顾这些价值观吗?
我只需要一种方法来确保我的脚本在指定的时间跨度之间运行.
I need to generate 12 digit Hex numbers in KSH on Solaris
Thanks
假设您有以下脚本:
#!/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)
我该如何逃离空白?
谢谢
我的程序启动一些服务并将其输出存储在tmp变量中,如果它以FATAL关键字开头,我想匹配变量的内容吗?如果它包含我将Port in use使用echo命令打印
例如,如果tmp包含FATAL: Exception in startup, exiting.
我可以通过以下方式完成sed:echo $tmp | sed 's/^FATAL.*/"Port in use"/'
但我想使用内置if来匹配模式.如何使用shell内置功能来匹配REGEX?