我有一个cron脚本,每晚从系统范围的/ etc / crontab运行,如下所示: 00 01 * * * www-data /root/scripts/image-auto-process.sh 1> /var/data/logs/cron.out 2> /var/data/logs/cron.err 这是一个bash脚本,用rsync备份一些完整扫描的jpeg目录,运行一个php程序来批量处理这些jpeg(预览/缩略图),将它们上传到服务器,并在成功清除前面提到的目录。 除了最后的清理步骤之外,所有的东西都像魅力一样。 但是,如果我作为www-data用户从命令行运行它,它就可以工作。 当它通过cron作为同一个用户运行,它不会。 最后的清理步骤如下所示: echo "remove original scans" for i in `find $SCAN_ORIG_DIR -mindepth 2 -type d -print | grep -v -f $EXCLUDES`; do rm -rvf $i; done echo "job Done…" $SCAN_ORIG_DIR是要search的目录。 $EXCLUDES是一个文件(www-data可读),包含要忽略目录的行(同一个文件用于告诉rsync什么不能备份)。 -mindepth 2用于查找,因为我只想返回也有子目录的$SCAN_ORIG_DIR子目录,如$SCAN_ORIG_DIR/subdir/subsubdir 。 我试着把上面的代码放到自己的脚本中,然后通过命令行和cron运行,只是为了确保脚本中没有先前的代码导致这个问题。 结果在命令行中(不是确切的表示,只是为了说明): remove […]
我正在研究脚本来查找服务器上目录的磁盘使用情况。 我需要处理名称中包含空格的文件夹。 我在使用for循环来运行每个带有空格的variables时遇到了问题,因为它会将它们看作两个单独的variables。 当前摘要: scandest="/root/*" usedest="/root/fileusage/diskusage" diskusage=$(du -sh $scandest > $usedest) dir=($(cat $usedest|cut -f2|cut -c7-)) storage=($(cat $usedest|cut -f1)) echo "${dir[@]}" 这将输出以下内容: anaconda-ks.cfg file test fileusage install.log install.log.syslog 一旦运行我的循环,文件“文件testing”将被拆分。 所以,如果我可以用每个variables的引号来回显,那么我就可以继续。 或者,如果有人对我想要达到的目标有更好的了解,那我就是耳朵! 谢谢 编辑2 循环包含2个数组目录和存储 for ((i=0;i<${#dir[@]};i++)); do echo "${dir[$i]}" — "${storage[$i]}" done 这又输出: anaconda-ks.cfg — 4.0K file — 0 test — 16K fileusage — 12K install.log […]
import subprocess nrange = "192.168.229." for i in range(0, 254): address = nrange + str(i) res = subprocess.call(['ping', '-c', '3', address]) if res == 0: print "ping to", address, "OK" elif res == 2: print "no response from", address else: print "ping to", address, "failed!" root@kali:~/Desktop# ./pypsweep.py ^C./pysweep.py: line 3: nrange: command not found ./pysweep.py: […]
我有一个脚本,必须处理目录中的一些文件(名称以AB开头)。 代码是: for file in AB* do cp … … done 当文件夹中没有* .txt文件时,代码执行一次。 但后来有错误,因为我试图复制一个不存在的文件。 当ls-command的结果为空时,怎样才能使do-command不执行? 我已经尝试过使用ls,引用组合>没有给出我想要的结果。
我有一个类似于以下的循环: for time in ${seconds_list}; do echo "scale=2; (${cur_time}-${time})/3600" | bc done 当然,我可以将结果“回显”到一个文件中,并用它来完成,但我认为一个更优雅的方法是将所有for循环结果存储在一个variables中,以便以后使用。 包含所有结果的variables必须看起来像这样: var='30.25 16.15 64.40 29.80' 有一个简单的方法,我可以做到这一点?
这个想法是,我想保存一些东西在bash中的数组。 重点是我想要一个数组的文件的名称。 所以我不知道我会有多lessarrays。 #!/bin/bash declare -A NAMES index=0 for a in recursive.o timeout.o print_recursive.o recfun.o do NAMES[$index]=$a index=$((index+1)) echo ${NAMES[ $index ]} done 当我用-x运行脚本时,我可以看到NAMES [$ index],索引不是以数字表示的,所以整个事情都不起作用。
我想暂停用户input的循环[例如。 Press any key ]循环中的每个项目后。 for %i in (server1,server2) do (ping %i)| pause for %i in (server1,server2) do (ping %i)| pause不起作用。 我确定我错过了一些明显的东西。 我已经尝试了choice并pause了more命令。 不能得到它的工作。
我想象征性地链接两个数组的元素。 例如, array1 = (AAA BBB CCC DDD) , array2 = (001 002 003 004) , 001->AAA , 002->BBB , array2 = (001 002 003 004) 003->CCC和004->DDD 。 这里是我写的shell脚本,但它不起作用,我不知道哪里错了。 declare -a array1=(AAA BBB CCC DDD) declare -a array2=(001 002 003 004) num = ${#array1[@]} ssh username@hostmachine 'for((i = 0 ; i < $num ; i++ […]
我有我需要pipe道到一个shell脚本文件的列表。 我可以通过使用以下内容列出目录中的文件: ls ~/data/2121/*SOMEFILE* 导致: 2121.SOMEFILEaa 2121.SOMEFILEab 2121.SOMEFILEac and so on… 我有另一个脚本,执行一个单一的文件(2121.SOMEFILEaa)处理我使用以下命令运行: bash runscript ../data/2121/2121.SOMEFILEaa 但是,我需要通过将通过ls生成的文件列表中的单个文件pipe道input到脚本中来提高效率。 我怎样才能将结果从ls ~/data/2121/*SOMEFILES*命令文件中按文件 – input到脚本脚本中?
我在Linux学习bash脚本,我想解决一个问题,我认为这将是容易的,但我只是无法弄清楚。 我想插入数字作为参数,例如: sh script.sh 5 如果我插入5(1 + 2 + 3 + 4 + 5)= 15,我想得到结果15 我想用function解决它。 n=$1 result=0 j=0 ADD(){ result=`expr $result + $j` } #for (( i=1; i<=$n; i++ )) for i in {0..$n..1} do ADD j=`expr $j + $1` done echo $result 每当我想添加号码,我想调用函数添加。 我不知道,如果我甚至想象的正确。 我不知道如何使用循环。 我已经尝试了两个不同的循环,我认为他们不能正常工作。