有没有办法在KornShell(ksh)脚本中抛出错误或警告,以防止使用未设置的变量?假设我有一个我想删除的临时文件夹.
TEMP_FILES_DIR='/app/myapp/tmp'
rm -Rf $TEMP_FILE_DIR #notice the misspelling
Run Code Online (Sandbox Code Playgroud)
如何在实际发生之前预防这种错误?
我知道脚本应该在尝试删除之前检查文件是否存在和空字符串,这只是一个愚蠢的例子来说明一些警告可以避免的错误.我不知道ksh中是否存在此功能.如果它确实存在,你如何打开它?
我试图重定向UNIX命令的STDOUT/STDERR并附加到korn shell中的日志文件.
rm -rf file1 >>&logfile
这个命令会在ksh中运行还是一个典型的bash命令?使用上述命令会对您造成什么伤害?
当你被赋予变量的名称时,ksh中有没有办法获得变量的值?
例如:
#!/usr/bin/ksh
var_name=$1 #pretend here that the user passed the string "PATH"
echo ${$var_name} #echo value of $PATH -- what do I do here?
Run Code Online (Sandbox Code Playgroud) 我有以下shell脚本,回声输出到日志和错误到err_file.但是,我特别希望向stderr回应一些陈述.请帮忙
#!/bin/ksh
echo "paramPassed: $0 $#"
err_file="error_file.txt"
new_file="new_file.txt"
exec >> ${new_file}
#exec >> ${new_file} 2>${err_file}
#exec >> ${new_file} 2>&1
if [ $# -eq 1 ]; then
username=$1
fi
userInfo=$(paramInfo ${username} | awk -F: '{print $2}')
echo ${userInfo}
rcp ${err_file} mtvst32:/rcs/ver34/${err_file}
if [ $? -ne 0 ]; then
#This doesn't work. Need the following to go to console
echo "UserInfo.SH FAILED copy to mtvst32" >> &2;
fi
Run Code Online (Sandbox Code Playgroud)
我希望将最后一个if条件的输出发送到std err但是,无法弄清楚该怎么做.
我有一个主机,我没有sudo.它是用ksh设置的,我太习惯了bash而且chsh不起作用.所以我把/ bin/bash作为系统中.profile的第一行.
结果是,当我登录到这个系统时,它会自动进入bash.但是,当我退出shell时,并不奇怪我在ksh中登陆.
有什么窍门可以避免这个吗?
有没有办法在KornShell(ksh)中使用'for'来实现以下内容?这是C等价物:
for(i=1;i<20;i++)
{
printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可以使用'for'而不是'while'来实现
我试过以下,似乎没有用.
for i in [1-20]
do
print $i
done
Run Code Online (Sandbox Code Playgroud)
请让我知道您的想法和解决方案.
我正在运行Solaris,我想知道如何使用ksh运行最后一个命令.我知道在bash/sh中你可以做"!!" 对于最后一个命令和!-N表示"N减去最后一个命令".KSH中的等价物是什么?先感谢您.
我在我的KornShell(ksh)脚本中有一个循环,我想要至少执行一次,我想要一种优雅的方式来做,但是当我发现很多关于如何编写while循环的东西时,似乎没有做任何事情......在那里循环.
我正在做的是从配置文件中读取逗号分隔的文件列表并处理它们.如果文件列表为空,那么我想处理目录中的所有文件.
有什么好办法呢?
编辑:这是我目前的情况.我抓取文件名,然后从字符串中删除它以进行下一次传递.如果Files列表为空,我退出循环.但是,如果列表开头为空,我希望它仍然运行一次.
while [[ -n "${FILES%%,*}" ]]; do
FILE="${FILES%%,*}"
FILES="${FILES#*,}"
done
Run Code Online (Sandbox Code Playgroud) 我需要知道执行分配的命令的退出状态。
export VALUE=`My_Get_Value 10`
Run Code Online (Sandbox Code Playgroud)
我需要知道My_Get_Value脚本的退出状态。
在$?我的状态是作业本身。
我在KSH v93中需要它
这是我的代码
CURR_MNTH=$(date +'%m' -d 'now')
if [$CURR_MNTH < 04]
THIS_QTR=1
elif [$CURR_MNTH < 07] && [$CURR_MNTH > 03]
THIS_QTR=2
elif [$CURR_MNTH < 10] && [$CURR_MNTH > 07]
THIS_QTR=3
elif [$CURR_MNTH > 09]
THIS_QTR=4
fi
echo $THIS_QTR
Run Code Online (Sandbox Code Playgroud)
我试图用上面的逻辑得到当前季度,但提示说我有'elif'意外错误..有人可以请帮助我