当前位置: 代码迷 >> 综合 >> shell note
  详细解决方案

shell note

热度:2   发布时间:2023-12-12 20:27:45.0

行for循环

for i in `seq -w 0 23`; do for j in `seq -w 0 5 59`; do echo 20120917$i$j; done done

 

日期时间左补零

leftpad=`echo $1 | sed 's/^/0/g' | sed -r 's/.+(..)$/\1/g'`

 

凑时间,凑整点

TIME=`date '+%s' -d '10 minutes ago'`
echo 'NOW: '`date -d "@$TIME" +'%Y%m%d%H%M'`TIME=$(($TIME - $PERIOD * 60 - 10#`date -d "@$TIME" +'%M'` % $PERIOD * 60))
TIME=`date -d "@$TIME" +'%Y%m%d%H%M'`
DATE=${TIME:0:8}
HH=${TIME:8:2}
MM=${TIME:10:2}echo "TIME: $TIME, DATE: $DATE, HH: $HH, MM: $MM"
exit

 

筛选文件,sum size

total=0; for i in $(for h in `seq -w 9 23`; do for m in 00 10 15 25 30 40 45 55; do ls -s 2012_10_22-${h}-${m}.log; done done | sed -r 's/^([^ ]+) .+/\1/g'); do total=`expr $total + $i`; done; echo `expr $total / 1024 / 1024`G

 

fifo

mkfifo q99999
for i in `seq -w 0 999`; do echo "hello.${i}" > q99999; done &
tail -f q99999

 

囧 重大发现 shell原来有数组,另外可以把输出用管道发送给while,不用再生成临时文件了

ls -l . | sed -r -e '/^total /d' | while read line; do#echo $lineline=(`echo $line | sed -r -e 's/\s+/" "/g' -e 's/^/"/' -e 's/\n$/"/'`)for i in `seq 0 ${#line[@]}`; do echo $i. ${line[i]}; done
done

 

满是图片的文件夹,瞬间变网页

 

if [ ! -d img ]; thenmkdir img
fi
prev=''; curr=''; ls | grep -v img | while read f; doif [ "$prev" = '' ]; thenprev=$felif [ "$curr" = '' ]; thenecho "<a href=\"${f}.html\"><img src=\"img/$prev\" /></a>" > img/${prev}.htmlcurr=$felseecho "<a href=\"${f}.html\"><img src=\"img/$curr\" /></a><a href=\"${prev}.html\">$prev</a>" > img/${curr}.htmlprev=$currcurr=$ffi#echo "$prev < $curr > $f"
done
curr=`ls | grep -v img | tail -n 1`; prev=`ls | grep -v img | tail -n 2 | head -n 1`; echo "<img src=\"img/$curr\" /><a href=\"${prev}.html\">$prev</a>" > img/${curr}.html
mv img/`ls | grep -v img | head -n 1`.html img/index.html
mv `ls | grep -v img | tr '\n' ' '` img/
mv img/*.html .

  

logger.sh

test ! $logs && logs=$(cd `dirname $0`; pwd)/logs
test -d "$logs" || mkdir "$logs"
log(){LOG_FILE=$logs/`basename $0 | sed -r 's/\.[^\.]+$//'`.`date '+%Y%m%d'`touch $LOG_FILEecho "`date '+%Y-%m-%d %H:%M:%S'` - $$ $1" >> $LOG_FILEreturn 0
}log 'logger ready!'

 

 

监控维持单个进程

#!/bin/shBASE=$(cd `dirname $0`; pwd)
cd $BASE. $BASE/logger.sh
log 'hi :-]'if [ $# -lt 1 ] || [ ! -f $1 ]; thenlog 'at least one argument, a exist file is required!'
fi
cmd="$*"pids="$logs/`basename $1 | sed -r 's/\.[^\.]+$//'`.pid"
if [ ! -f "$pids" ]; thenecho $$ > "$pids"
fi
pid=`head -n 1 "$pids"`
if [ "$pid" -eq "$$" ]; thenlog "[$cmd] starting"
elif [ "$pid" -ne "$$" -a `ps -ef | grep -P "^[^\s]+\s+$pid\s" | grep -v 'grep' | wc -l` -gt 0 ]; thenlog "[$cmd] on running"exit
elselog "[$cmd] new starting"echo $$ > "$pids"
fi(eval "$cmd") &
wait
log "[$cmd] stoped"

 

 

  相关解决方案