我有一个文件,字段由管道字符分隔,我想只打印第二个字段.此尝试失败:
$ cat file | awk -F| '{print $2}'
awk: syntax error near line 1
awk: bailing out near line 1
bash: {print $2}: command not found
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
在shell ksh脚本中计算前一个工作日的最优雅方法是什么?
我到现在所拥有的是:
#!/bin/ksh
set -x
DAY_DIFF=1
case `date '+%a'` in
"Sun")
DAY_DIFF=2
;;
"Mon")
DAY_DIFF=3
;;
esac
PREV_DT=`perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()-${DAY_DIFF}*24*60*60);printf "%4d%02d%02d",$year+1900,$mon+1,$mday;'`
echo $PREV_DT
Run Code Online (Sandbox Code Playgroud)
如何将$ {DAY_DIFF}变量作为值而不是字符串传输?
我正在编写shell脚本,其中很多时候会将一些东西写入文件,然后执行一个读取该文件的应用程序.我发现,通过我们公司,网络延迟差别很大,因此一个简单sleep 2的例子就不够健壮.
我试着编写一个(可配置的)超时循环,如下所示:
waitLoop()
{
local timeout=$1
local test="$2"
if ! $test
then
local counter=0
while ! $test && [ $counter -lt $timeout ]
do
sleep 1
((counter++))
done
if ! $test
then
exit 1
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
这适用于test="[ -e $somefilename ]".但是,测试存在是不够的,我有时需要测试某个字符串是否写入文件.我试过了
test="grep -sq \"^sometext$\" $somefilename",但这没用.有人可以告诉我为什么吗?
是否有其他更简洁的选项来执行此类测试?
我正在测试下面的shell脚本:
#!/bin/ksh -x
instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
Run Code Online (Sandbox Code Playgroud)
它在if条件中给出了这个错误:
: ==: unknown test operator
Run Code Online (Sandbox Code Playgroud)
是==不是使用正确的语法?我在命令行上运行如下
test_lsn_2 INSTANCE=ALL
Run Code Online (Sandbox Code Playgroud)
有人可以建议一个解决方案.谢谢.
我有一个我在ksh中使用的自定义.profile,下面是我创建的一个函数,可以从具有过于复杂或长名称的目录中来回跳过.
如您所见,路径名存储在数组(BOOKMARKS[])中以跟踪它们并在以后引用它们.我希望能够使用case语句(或必要时的OPTARG)从数组中删除某些值,这样我只需键入bmk -d #即可删除相关索引处的路径.
我已经摆弄了array +A and -A,但它刚刚搞砸了我的阵列(注释掉的代码中剩下的东西可能不太漂亮......我没有校对它).
有关如何创建该功能的任何建议/提示?谢谢!
# To bookmark the current directory you are in for easy navigation back and forth from multiple non-aliased directories
# Use like 'bmk' (sets the current directory to a bookmark number) to go back to this directory, i.e. type 'bmk 3' (for the 3rd)
# To find out what directories are linked to which numbers, type 'bmk -l' (lowercase L)
# For every new directory …Run Code Online (Sandbox Code Playgroud) 我想在一个ksh脚本(使用exec)中创建一个管道,将管道连接到一个T形管,并将输出发送到管道.
当前:
#Redirect EVERYTHING
exec 3>&1 #Save STDOUT as 3
exec 4>&2 #Save STDERR as 4
exec 1>${Log} #Redirect STDOUT to a log
exec 2>&1 #Redirect STDERR to STDOUT
Run Code Online (Sandbox Code Playgroud)
什么了我喜欢做的(但我没有语法正确):
#Redirect EVERYTHING
exec 3>&1 #Save STDOUT as 3
exec 4>&2 #Save STDERR as 4
exec 1>tee -a ${Log} >&3 #Redirect STDOUT to a log
exec 2>&1 #Redirect STDERR to STDOUT
Run Code Online (Sandbox Code Playgroud)
我怎样才能创建这个管道?
我想从函数中获取函数名称,以便进行日志记录.
KornShell(ksh)功能:
foo ()
{
echo "get_function_name some useful output"
}
Run Code Online (Sandbox Code Playgroud)
有什么类似的$0,它返回脚本中的脚本名称,但它提供了一个函数的名称?
首先,我对CYGWIN一无所知所以请耐心等待......
我们的开发人员需要从我们的DBA中获取一些文本转储.他们通过CYGWIN环境与Windows上的Oracle合作,并且使用kornshell.
问题:我们如何使用kornshell/cygwin将旧式文本文件复制到标准Windows网络共享(UNC地址)?
注意:我们已经讨论过一种解决方法,DBA可以将文本文件放在本地临时文件夹中,然后设置Windows任务以将文本文件复制/移动到UNC地址.我们想避免这种冲击.
QNX(Neutrino 6.5.0)使用ksh的开源实现作为其shell.许多提供的脚本(包括系统启动脚本)都使用诸如的结构
if ! test /dev/slog -ef /dev/slog; then
# do something
fi
Run Code Online (Sandbox Code Playgroud)
检查文件系统中是否存在资源管理器.我搜索过,只能找到非常严厉的解释,-ef检查两个参数是否实际上是同一个文件.由于指定的文件名是相同的,它似乎只是减少到检查文件是否存在.
我检查过的行为test -a和test -e(似乎根据我读过的各种文档检查任何类型文件的文件存在),它们似乎也有效.
在-ef和-a/ 之间执行的检查是否有任何区别-e?是否使用-ef某种尝试来防止文件存在时的竞争条件?
我已经在stackoverflow和其他关于2>&1的使用的来源中检查了几个相关帖子.
不幸的是到目前为止还没有彻底解决它.
我知道2是stderr,1是stdout,我们正在与2>&1结合.
但我的问题是:有什么区别:
1. mycommand > /dev/null
2. mycommand 2> /dev/null
3. mycommand > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
我刚在想:
相关帖子: