我正在使用Linux ksh删除一些我不想要的旧目录。 我使用的是这样的: #! /bin/ksh OLD=/opt/backup DIR_PREFIX="active" DIRS=$(ls ${OLD} -t | grep ${DIR_PREFIX}) i=0 while [[ $i -lt ${#DIRS[*]} ]]; do if [ $i -gt 4 ]; then echo ${DIRS[$i]} ((i++)) else ((i++)) fi done 我想要做的是:将一个列表按时间sorting的所有目录存储到一个variables – 我假设它将是一个数组,但不知何故它的大小是1 …,然后在while循环中,如果目录的位置大于4,则打印出目录名称。 任何想法如何
我有一个包含众多独特项目的文件,在这个例子中我使用了用户ID。 我的脚本的起始部分应该向运行脚本的用户显示列表,并允许他们select其中一个ID。 然后,脚本应该交叉检查用户对原始文件所作的select,如果匹配,则应该提供一条build议匹配的消息并继续执行脚本。 如果不匹配,脚本应该build议用户并退出。 我目前的脚本确实如此,但我想知道是否有任何方法使它变得更智能/更浓缩,也许使用数组? 当前脚本: 这是我在这个网站上的第一篇文章,所以我对发布过程中发生的任何错误深表歉意。 FILE=testfile IDLIST="$(awk '{print $1}' $FILE)" echo "$IDLIST" echo "\nSelect one of the options" read input OUTPUT="$(for i in $IDLIST do if [[ $i = $input ]] then echo "Matched." fi done)" if [[ -z $OUTPUT ]] then echo "Invalid choice." exit 0 else ID=$input fi echo "It is […]
我想知道是否有办法创build一个脚本如下: #!/bin/ksh export() { echo "We're in the local function" } export 主要的问题是export是一个设置variables或环境variables值的环境命令,所以当这个脚本运行时,它只会提示如下: LOGIN=autosys LOGNAME=autosys MAIL=/usr/spool/mail/autosys PWD=/home/autosys/wlp SHELL=/usr/bin/ksh TZ=Europe/Paris HOME=/home/autosys … 很明显,我可以用不同的名称命名我的函数,但我很好奇(因为这个函数应该被命名为export,逻辑目的),我不知道是否有一种方法让脚本知道我想运行本地导出( )function而不是环境命令。 比如类似的东西 export(){…} call function(export)
我login到server_a并运行具有以下脚本的.sh文件: scp user@server_b:/my_folder/my_file.xml user@server_b:/my_new_folder/ 将文件从my_folder复制到my_folder的my_new_folder 。 它不会抛出错误,但不会复制文件。 笔记: server_b被预设的rsa_keys访问。 server_a :unix server_b :ubuntu SCP可以向/从这些服务器发送文件而没有任何问题 最终目标是移动或复制/删除文件。
我试图找出,如何在特定的时间启动与cron工作的JBoss。 我现在正在做的是设置一个cron,然后在JBoss startinstance脚本中,我放置睡眠700秒,直到jboss启动。 有没有更好的方法来真正知道JBoss何时成功启动,然后继续stream动,而不是睡700秒? 有没有人做类似的事情? 我有这样的事情,我不认为这是正确的解决scheme: #!/bin/ksh #This script accepts one parameter URL which should to tracked usage() { msg=${1} echo "ERROR: " exit 1 } args_no=$# if [[ ${args_no} -ne 1 ]]; then usage fi URL_to_check=${1} jboss_status=1 while [[ ${jboss_status} -ne 0 ]]; do wget ${URL_to_check} > /dev/null jboss_status=$? sleep 10 done exit 0
我正在拖尾像这样: while [[ ! -n "${ready}" ]]; do start_info=`grep "Ready" $LOG_FILE` sleep 10 done 如果这个日志文件里面没有“Ready”这个永远继续下去的东西,那我怎么能让它运行起来让我们说200秒呢? 像某种时间门槛。 谢谢
编写一个shell脚本的最好方法是访问与之相关的文件,这样我就可以从中调用它。 “简单”意味着最简单/推荐的方式,将跨越不同的系统/炮弹工作。 例 说我有一个文件夹~/MyProject子文件夹scripts/和files/ 。 在scripts/ ,我有一个shell脚本foo.sh ,它想要访问files/中的files/ : if [ -f "../files/somefile.ext" ]; then echo "File found" else echo "File not found" fi 它会正常工作如果我做cd ~/MyProject/scripts && ./foo.sh ,但它将失败, cd ~/MyProject && scripts/foo.sh
我有16个计算要做,我想批量启动它,以便同时使用我的机器的16个核心。 我想做一个这样的shell脚本: #!/bin/ksh for i in `seq 16` do cd directory$i <batch command> done 可能吗?
我发现了另一个问题,我们正在努力将几百个ksh脚本从AIX,Solaris和HPUX移植到Linux。 在这里看到以前的问题。 此代码: #!/bin/ksh if [ -ak* ]; then echo "Oh yeah!" else echo "No way!" fi exit 0 (当在名字以k开头的多个文件的目录中运行时)产生“哦,是啊! 当用AT&T ksh变体(ksh88和ksh93)调用时。 另一方面它产生错误信息,然后是“不可能!” 在其他ksh变种(pdksh,MKS ksh和bash)。 我的问题再一次是: 是否有一个环境variables会导致pdksh行为像ksh93? 否则: 有没有在pdksh上获得所需的行为的选项?
在KSH中有一种方法可以退出一个case语句,然后转到一个特定的行来执行下一个代码? 或者有可以使用的转让标签? 像这样的东西,而不是嵌套吨分支?