免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

[学习共享] 2013年ChinaUnix社区Shell编程大赛!(获奖名单公布)!  关闭 [复制链接]

论坛徽章:
0
101 [报告]
发表于 2013-06-27 17:46 |只看该作者
第六题:
  1. #!/bin/bash

  2. echo "Today is $(date '+%j')th day of the year."
  3. read year month day < <(echo $1 | sed 's/-/ /g')
  4. #echo "year=$year,month=$month,day=$day"
  5. [ $(( $year % 4 )) -eq 0 -a $(( $year % 100 )) -ne 0 -o $(( $year % 400 )) -eq 0 ] && LEAP_JAN_DAYS=29
  6. #echo "LEAP=$LEAP"
  7. #1月1号的特殊处理
  8. if [ "$day" -eq 1 -a "$month" -eq 1 ]
  9. then
  10.     echo "Yesterday is $(( $year - 1 ))-12-31."
  11.     exit 0
  12. fi

  13. days_of_month=(0 31 ${LEAP_JAN_DAYS:-28} 31 30 31 30 31 31 30 31 30 31)
  14. if [ "$day" -eq 1 ]
  15. then
  16.     echo "Yesterday is ${year}-$(($month - 1))-${days_of_month[$(($month - 1))]}."
  17. else
  18.     echo "Yesterday is ${year}-$month-$(($day - 1))."
  19. fi
复制代码

论坛徽章:
0
102 [报告]
发表于 2013-06-27 19:29 |只看该作者
第八题:
这里只讲Bash下的情况。默认情况下Bash的文件名扩展是打开的,用rm *可以删除带空格名称的文件,因为Bash会把*号替换成当前目录下所有文件的文名,包括那些包含空格的。如果在Bash下执行:
  1. set -f
复制代码
这样会关闭文件名扩展,这时再用rm *就只能删除名为'*'的文件了。

论坛徽章:
0
103 [报告]
发表于 2013-06-27 20:02 |只看该作者
第九题:
  1. # fileset='[op]*'
  2. # for file in $fileset ; do echo $file ; done
  3. opendocs
  4. optimize_guide.html
  5. org
  6. post.txt
  7. proxy-unix-domain-socket-r2.patch
复制代码
从上面的代码可以看出Bash先将变量fileset替换成相应的值,再根据文件名扩展(globbing)的规则,扩展成当前目录下所有符合该模式的文件的。如果文件名扩展发生在变量扩展之前,那么这个循环是无法执行的。

论坛徽章:
0
104 [报告]
发表于 2013-06-27 22:02 |只看该作者
第十题:
第1小题
  1. find . -maxdepth 1 ! -name '201306*' -type f
复制代码
第2、3、4小题
  1. #!/bin/bash

  2. #脚本假定执行路径为dirA和dirB的上一级目录。

  3. #第2小题
  4. #rename工具,本质上是perl,有没有违反规定?
  5. rename 's/[ \[\]]//g' dirA/* dirB/*

  6. #第3小题
  7. for file in $(ls dirB/*) ; do rm -f dirA/${file#*/} ; done

  8. #第4小题
  9. for file in $(ls dirB/*.XQF ; ls dirA/*.XQF)
  10. do
  11.     bare_name=${file%.XQF} && bare_name=${bare_name#*/}
  12.     rm -f dirA/${bare_name}.che
  13.     rm -f dirB/${bare_name}.che
  14. done
复制代码

论坛徽章:
0
105 [报告]
发表于 2013-06-28 00:20 |只看该作者
本帖最后由 zhujinzz 于 2013-07-04 00:47 编辑

1
  1. awk '{print $NF}' illegal.log | sort | uniq -c | sort -nr | head -n 10
复制代码
2
  1. #!/bin/base

  2. cur_time=`date +%s`
  3. begin_time=`expr $cur_time - 600`

  4. cur_log_time=`date -d"1970-01-01 UTC ${cur_time} seconds" "+%b %d, %Y %H:%M"`
  5. cur_pat=`echo ${cur_log_time} | sed 's/.$//g'`
  6. begin_log_time=`date -d"1970-01-01 UTC ${begin_time} seconds" "+%b %d, %Y %H:%M"`
  7. begin_pat=`echo ${begin_log_time} | sed 's/.$//g'`

  8. awk '$0~/'${begin_pat}'/{print NR,$0}' wls_ms1.out > /tmp/wls_ms1.out.tmp
  9. awk '$0~/'${cur_pat}'/{print NR,$0}'  wls_ms1.out >> /tmp/wls_ms1.out.tmp

  10. for((i=1;i<601;i++))
  11. do
  12.   begin_time=`expr ${begin_time} + 1`
  13.   begin_pat=`date -d"1970-01-01 UTC ${begin_time} seconds" "+%b %d, %Y %H:%M"`
  14.   begin_line=`awk '$0~/'${begin_pat}'/{print $1}' /tmp/wls_ms1.out.tmp`
  15.   if [ "X${begin_line}" != "X" ];then
  16.     break
  17.   fi
  18. done

  19. for((i=1;i<601;i++))
  20. do
  21.   cur_time=`expr ${cur_time} - 1`
  22.   cur_pat=`date -d"1970-01-01 UTC ${cur_time} seconds" "+%b %d, %Y %H:%M"`
  23.   cur_line=`awk '$0~/'${cur_pat}'/{print $1}' /tmp/wls_ms1.out.tmp`
  24.   if [ "X${cur_line}" != "X" ];then
  25.     break
  26.   fi
  27. done

  28. sed -n "${begin_line},${cur_line}p" wls_ms1.out > /tmp/log.file

  29. error_log = `grep '<error>' /tmp/log.file`
  30. if [ "X${error_log}" != "X" ];then
  31.   sendMail xxxxx
  32. fi
复制代码
3
  1. #!/bin/bash

  2. sdir="/opt/WebSphere/AppServer"
  3. ddir="/var/ChinaUnix"

  4. back_program () {
  5. cur_time=$1
  6. ip=$2
  7. if [ "${cur_time}" -ne 7 ];then
  8. ssh root@${ip}<<EOF
  9.     tar -g /opt/snapshot \
  10.         --exclude="bin" \
  11.         --exclude="log" \
  12.         --exclude="*.log" \
  13.         --exclude="*heapdump*" \
  14.         --exclude="*.gz" \
  15.         --exclude="*.tar" \
  16.         --exclude="*.zip" \
  17.         --exclude="*.bak" \
  18.         -czf /opt/profiles_increment_${ip}_${cur_time}.tar.gz ${sdir}/profiles
  19. EOF
  20. else
  21. ssh root@${ip}<<EOF
  22.     tar -czf /opt/profiles_full_${ip}_${cur_time}.tar.gz \
  23.         --exclude="bin" \
  24.         --exclude="log" \
  25.         --exclude="*.log" \
  26.         --exclude="*heapdump*" \
  27.         --exclude="*.gz" \
  28.         --exclude="*.tar" \
  29.         --exclude="*.zip" \
  30.         --exclude="*.bak" \
  31.         ${sdir}/profiles
  32. EOF
  33. fi
  34. }

  35. c_time=`date +%u`
  36. for((i=3;i<101;i++))
  37. do
  38.   back_program "${c_time}" "192.168.1.${i}"
  39.   if [ "${c_time}" -ne 7 ];then
  40.     /usr/bin/scp root@192.168.1.${i}:/opt/profiles_increment_192.168.1.${i}_${c_time}.tar.gz ${ddir}/
  41.     ssh root@192.168.1.${i} "rm -f /opt/profiles_increment_192.168.1.${i}_${c_time}.tar.gz"
  42.   else
  43.     /usr/bin/scp root@192.168.1.${i}:/opt/profiles_full_192.168.1.${i}_${c_time}.tar.gz ${ddir}/
  44.     ssh root@192.168.1.${i} "rm -f /opt/profiles_full_192.168.1.${i}_${c_time}.tar.gz"
  45.   fi
  46. done
复制代码
4
  1. command1 && command2 || command3
  2. 1 command1 False,则command3
  3. 2 command1 True,则command2,if True,则exit,if False,则command3

  4. if command1
  5. then
  6.   command2
  7. else
  8.   command3
  9. fi

  10. 1 command1 True 则command2,否则command3
复制代码
5
  1. #!/bin/bash

  2. nums=$1
  3. if [ $# -ne 1 ];then
  4.    echo "Usage:./num_add.sh num(eg 123901)"
  5.    exit 1
  6. fi

  7. n_nums=$((${#nums}-1))

  8. sum=0
  9. for i in `seq 0 ${n_nums}`
  10. do      
  11.      arr[$i]=${nums:$i:1}
  12.      sum=`expr $sum + ${arr[$i]}`
  13. done

  14. echo ${sum}
复制代码
6
  1. #!/bin/bash

  2. t=$1
  3. if [ $# -ne 1 ];then
  4.   echo "Usage:./time.sh time(2013-05-23)"
  5.   exit 1
  6. fi

  7. sz=`echo ${t} | grep ':'`
  8. if [ "X$sz" != "X" ];then
  9. sec=`echo "${t}" | awk '{gsub(/-/," ",$0);gsub(/:/," ",$0);print mktime($0)}'`
  10. sec1=`expr $sec - 86400`
  11. echo "$sec" | awk '{day=strftime("%j",'$sec');print day}'
  12. echo "$sec" | awk '{day=strftime("%j",'$sec1');print day}'
  13. else
  14. t="$t 00:00:00"
  15. sec=`echo "${t}" | awk '{gsub(/-/," ",$0);gsub(/:/," ",$0);print mktime($0)}'`
  16. sec1=`expr $sec - 86400`
  17. echo "$sec" | awk '{day=strftime("%j",'$sec');print day}'
  18. echo "$sec1" | awk '{day=strftime("%j",'$sec1');print day}'
  19. fi
复制代码
8 可以,这里是通配符,测试结果如下
  1. [test@test test]$ ll
  2. 总用量 4
  3. -rw-r--r-- 1 test test 87  7月  4 00:44 a .log
  4. [test@test test]$ rm *
  5. [test@test test]$ ll
  6. 总用量 0
  7. [test@test test]$
复制代码

论坛徽章:
0
106 [报告]
发表于 2013-06-28 00:20 |只看该作者
本帖最后由 zhujinzz 于 2013-07-04 00:38 编辑

多发了一份,路过,改改

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
107 [报告]
发表于 2013-06-30 09:54 |只看该作者
本帖最后由 amarant 于 2013-07-02 19:09 编辑

今天才看到,闲着也试图答几个问题,但是shell好久没用了,忘记了好多。
1:
  1. #!/bin/bash
  2. awk -F '\t' '{print $6}' illegal.log  | sort > file_sort
  3. cat file_sort | uniq > file_ip
  4. ips=`cat file_ip`

  5. for ip in $ips; do
  6.   times=`grep $ip file_sort | wc -l`
  7.   echo -e "$ip\t$times" >> file_times
  8. done
  9. cat file_times | sort -n -r -k 2 | uniq | sed '11,$d'
  10. rm file_*

  11. #####################
  12. #220.250.52.66 70
  13. #220.250.58.170 36
  14. #220.250.58.171 30
  15. #220.250.52.90 29
  16. #220.250.58.172 28
  17. #142.4.117.83 27
  18. #111.73.45.13 23
  19. #222.186.26.26 22
  20. #74.91.23.27 19
  21. #91.237.249.67 16
复制代码
2:
  1. #!/bin/bash

  2. grep 'Error' wls_ms1.out > file_tmp
  3. if [ $? -ne 0 ]; then # No Error found
  4.   exit
  5. fi

  6. echo "Errors was found in wls_ms1.out" | mail -s "WARNING!" admin@ChinaUnix.net

  7. awk -F '>' '{print $1}' file_tmp | sed 's/^<//' > file_time
  8. time_now=`date +%s`
  9. while read i
  10.   do
  11.     time_i=`date -d "$i" +%s`
  12.     interval=`expr $time_now - $time_i`
  13.     if [ $interval -lt 600 ]; then
  14.       grep "$i.*Error" file_tmp
  15.     fi
  16.   done < file_time

  17. rm -f file_tmp file_time
复制代码
3:
  1. #!/bin/bash

  2. for i in $(seq 3 100); do
  3.   ssh root@192.168.1.$i
  4.   if [ `date +%a` == 'Sun' ]; then
  5.     tar -cvjf $i.tar.bz2 /opt/WebSphere/AppServer/profiles/
  6.   else
  7.     tar -cvjf $i.tar.bz2 /opt/WebSphere/AppServer/profiles/ --exclude='*.log' --exclude='*heapdump*' --exclude='*.gz' --exclude='*.tar' --exclude='*.zip' --exclude='*.bak' --exclude='bin' --exclude='logs'
  8.   fi
  9.   scp $i.tar.bz2 root@192.168.1.2:/var/ChinaUnix/
  10.   exit
  11. done
  12. crontab中加入:
  13. 30 21 * * * myshell
复制代码
4:
  command1 && command2 || command3 存在逻辑短路,如果command1是假,那么不会执行command3。
  
5:
  1. #!/bin/bash
  2. let n=1234
  3. let ans=0
  4. while [ $n -gt 0 ]; do
  5.   let ans=$(expr ${ans} + ${n} % 10)
  6.   let n=$(expr ${n} / 10)
  7. done
  8. echo $ans
复制代码
6:
  1. #!/bin/bash

  2. let is_leap=0

  3. check_leap()
  4. {
  5. #if(((x%4==0)&&(x%100!=0))||(x%400==0))  {alert("闰年")}
  6.   if [[ $(expr $1 % 4) -eq 0 && $(expr $1 % 100) -ne 0 ]]; then
  7.     let is_leap=1
  8.     return
  9.   fi
  10.   if [[ $(expr $1 % 400) -eq 0 ]]; then
  11.     let is_leap=1
  12.     return
  13.   fi
  14.   is_leap=0
  15. }

  16. gen_date_table()
  17. {
  18.   let table[1]=0
  19.   let table[2]=$(expr ${table[1]} + 31)
  20.   if [ ${is_leap} -eq 0 ]; then
  21.     let table[3]=$(expr ${table[2]} + 28)
  22.   else
  23.     let table[3]=$(expr ${table[2]} + 29)
  24.   fi
  25.   let table[4]=$(expr ${table[3]} + 31)
  26.   let table[5]=$(expr ${table[4]} + 30)
  27.   let table[6]=$(expr ${table[5]} + 31)
  28.   let table[7]=$(expr ${table[6]} + 30)
  29.   let table[8]=$(expr ${table[7]} + 31)
  30.   let table[9]=$(expr ${table[8]} + 31)
  31.   let table[10]=$(expr ${table[9]} + 30)
  32.   let table[11]=$(expr ${table[10]} + 31)
  33.   let table[12]=$(expr ${table[11]} + 30)
  34. }

  35. let year=2013
  36. let month=5
  37. let date=23
  38. #let year=2013
  39. #let month=3
  40. #let date=1
  41. check_leap $year
  42. gen_date_table
  43. number=${table[$month]}
  44. number=$(expr $number + $date)
  45. echo from $year 01 01 to $year $month $date: $number days

  46. temp=${table[$month]}
  47. temp=$(expr $temp + 1)
  48. if [ $number -gt $temp ]; then
  49.   echo yestoday: $year $month $(expr $date - 1)
  50. elif [ $month -eq 1 ]; then
  51.   echo yestoday: $(expr $year - 1) 12 31
  52. else
  53.   echo yestoday: $year $(expr $month - 1) $(expr ${table[$month]} - ${table[$(expr $month - 1)]})
  54. fi

  55. ##########
  56. # from 2013 01 01 to 2013 5 23: 143 days
  57. # yestoday: 2013 5 22
  58. #
复制代码
7:
  1. #!/bin/bash

  2. # a b c
  3. # d e f
  4. # g h i
  5. # (a+d+g+a+b+c)*100 + (b+e+h+d+e+f)*10 + (c+f+i+g+h+i) = 4446
  6. # a b d e: 2 4 6 8; c f i h g: 1 3 5 7 8

  7. even="2 4 6 8"
  8. odd="1 3 5 7 9"

  9. for a in $even; do
  10. for b in $even; do
  11.   if [ $b -ne $a ]; then
  12.   for d in $even; do
  13.    if [[ $d -ne $a && $d -ne $b ]]; then
  14.    for e in $even; do
  15.     if [[ $e -ne $a && $e -ne $b && $e -ne $d ]]; then
  16.     for c in $odd; do
  17.      for f in $odd; do
  18.       if [[ $f -ne $c ]]; then
  19.       for i in $odd; do
  20.        if [[ $i -ne $c && $i -ne $f ]]; then
  21.        for h in $odd; do
  22.         if [[ $h -ne $c && $h -ne $f && $h -ne $i ]]; then
  23.         for g in $odd; do
  24.          if [[ $g -ne $c && $g -ne $f && $g -ne $i && $g -ne $h ]]; then
  25.           aim=`echo "($a*2+$d+$g+$b+$c)*100+($b+$e*2+$h+$d+$f)*10+($c+$f+$i*2+$g+$h)" | bc`
  26.           if [ $aim -eq 4446 ]; then
  27.            echo -en "$a $b $c\n$d $e $f\n$g $h $i\n\n"
  28.           fi
  29.          fi
  30.         done
  31.         fi
  32.        done
  33.        fi
  34.       done
  35.       fi
  36.      done
  37.     done
  38.     fi
  39.    done
  40.    fi
  41.   done
  42.   fi
  43. done
  44. done
  45. #############
  46. # 8 4 7
  47. # 6 2 3
  48. # 9 5 1
  49. #
  50. # 8 4 7
  51. # 6 2 5
  52. # 9 3 1
  53. #
  54. # 8 4 9
  55. # 6 2 3
  56. # 7 5 1
  57. #
  58. # 8 4 9
  59. # 6 2 5
  60. # 7 3 1
  61. #
  62. # 8 6 7
  63. # 4 2 3
  64. # 9 5 1
  65. #
  66. # 8 6 7
  67. # 4 2 5
  68. # 9 3 1
  69. #
  70. # 8 6 9
  71. # 4 2 3
  72. # 7 5 1
  73. #
  74. # 8 6 9
  75. # 4 2 5
  76. # 7 3 1
  77. ###########
复制代码
8:
  可以,shell扩展*的时候会自动把空格转义。

9:
  touch -- \$\{\!BASH_testtttttttttttttt\}
  echo ${!BASH*}
  说明:先创建一个奇怪的文件,然后用相关的参数扩展匹配它。结果里没有这个文件名。

10:
  1. #!/bin/bash
  2. # 1:
  3. ls | grep -v '^20130605'

  4. # 2:
  5. ls | sed 's/ //g' | sed 's/\[//g' | sed 's/\]//g'

  6. # 3:
  7. for file in `ls dirA`; do
  8.   if [ -f dirB/$file ]; then
  9.     rm dirA/$file
  10.   fi
  11. done

  12. # 4:
  13. for file in `ls dirA`; do
  14.   if [ -f dirB/${file%%.*}* ]; then
  15.     if [ -f dirA/${file%%.*}.che ]; then
  16.       rm dirA/${file%%.*}.che
  17.     fi
  18.     if [ -f dirB/${file%%.*}.che ]; then
  19.       rm dirB/${file%%.*}.che
  20.     fi
  21.   fi
  22. done
复制代码

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
108 [报告]
发表于 2013-06-30 09:56 |只看该作者
回复 1# send_linux


    比赛结束就能看到别人的答案吧?

论坛徽章:
5
金牛座
日期:2013-10-14 14:40:422015年亚洲杯之伊朗
日期:2015-03-26 10:37:012015亚冠之浦和红钻
日期:2015-10-12 17:47:4115-16赛季CBA联赛之山东
日期:2016-01-20 16:43:1215-16赛季CBA联赛之辽宁
日期:2016-03-29 16:43:59
109 [报告]
发表于 2013-07-01 15:43 |只看该作者
环境:
SLES11SP2_32:~ # uname -r
3.0.13-0.27-pae
SLES11SP2_32:~ # cat /etc/issue

Welcome to SUSE Linux Enterprise Server 11 SP2  (i586) - Kernel \r (\l).

SLES11SP2_32:~ #
第一题:
grep -oP '(\d+\.){3}\d+' illegal.log  |sort |uniq -c |sort -r |head -10

第二题:
#/bin/bash
DATE='date'
DATE10AGO=`date -d "10  minutes ago"`
Error_line=`awk -F"[<>]" '$2>= "'"$DATE10AGO"'" && $2 <= "'"$DATE"'"' /root/bs/wls_ms1.out |grep Error 2>/dev/null`
if [ -n "$Error_line" ];then
   echo "$Error_line" |mail -s Error_mail admin@ChinaUnix.net
fi

第三题:
#/bin/bash
if [ `date +%u` -ne 7 ];then
  for (( i=3;i<=100;i++ ))
     do
        ssh  192.168.1.$i >/dev/null <<EOF
cd /opt/WebSphere/AppServer/profiles
tar -N "`date +%Y/%m/%d -d "1 day ago"`" --exclude={bin,logs,*.log,*heapdump*,*.gz,*.tar,*.zip,*.bak} -zcvf ${i}_`date +%Y_%m_%d`.tar.gz * >/dev/null
scp ${i}_`date +%Y_%m_%d`.tar.gz 192.168.1.2:/var/ChinaUnix/ >/dev/null 2>&1
EOF
  done
else
  for (( i=3;i<=100;i++ ))
     do
        ssh  192.168.1.$i >/dev/null <<EOF
cd /opt/WebSphere/AppServer/profiles
tar --exclude={bin,logs,*.log,*heapdump*,*.gz,*.tar,*.zip,*.bak} -zcvf ${1}_`date +%Y_%m_%d`.tar.gz * >/dev/null
scp ${i}_`date +%Y_%m_%d`.tar.gz 192.168.1.2:/var/ChinaUnix/ >/dev/null 2>&1
EOF
     done
fi

第四题:
&&||式命令会看前面命令是否正确执行,正确就执行,不正确就跳过本条命令继续向下走
If就是选择了,依据command1来决定执行then语句还是else语句
SLES11SP2_32:~ # ls
bin  bs  Desktop  Documents  inst-sys  oracle.sh  test.sh  ttt
SLES11SP2_32:~ # echo "yes" &&cat test ||echo "no"
yes
cat: test: 没有那个文件或目录
no
SLES11SP2_32:~ # if echo "yes" ;then cat test;else echo "no"; fi
yes
cat: test: 没有那个文件或目录
SLES11SP2_32:~ #

第五题:
#/bin/bash
read -p "please input a number: " NUM
i=0
total=0
while (( i<${#NUM} ))
  do
        let total+=${NUM:i:1}
        (( i++ ))
done
echo $total

第六题:
#/bin/bash
read -p "please input date(like yyyy-mm-dd ) : " DATE
DR=(`echo $DATE |awk -F"-" '{print $1,$2,$3}'`)
DAYS=${DR[2]}
for (( i=1; i<${DR[1]};i++ ))
  do
        case $i in
        1 | 3 | 5 | 7 | 8 | 10 | 12)
                M_DAY=31;;
        4 | 6 | 9 | 11)
                M_DAY=30;;
        2)  if (( ${DR[0]}%4 == 0 ));then
                M_DAY=29
                else M_DAY=28
            fi ;;
        esac
        let DAYS+=$M_DAY
  done
  
echo "ZHE SHI ${DR[0]} NIAN DI $DAYS DAY. "
echo -n "ZUO TIAN RI QI SHI : "
if [ ${DR[2]} -ne 1 ];then
        let DAY=${DR[2]}-1
        echo ${DR[0]}-${DR[1]}-$DAY
else
        let MONTH=${DR[1]}-1
        let YEAR=${DR[0]}
        case ${DR[1]} in
        5 | 7 | 10 | 12)
                DAY=30;;
        2 | 4 | 6 | 8 | 9 | 11)
                DAY=31;;
        1) DAY=31;MONTH=12;let YEAR=${DR[0]}-1;;
        3) if (( ${DR[0]}%4 == 0 ));then
                DAY=29
                else DAY=28
           fi;;
        esac
        echo $YEAR-$MONTH-$DAY
fi

第七题:
#!/bin/bash

XT_CK()  {
RC=''
for (( k=1;k<$1;k++ ))   ##排除重复
   do
        if [ ${NUM[$1]} -eq ${NUM[k]} ];then
        RC=xt
        break
        fi
   done
if [ X$RC == "Xxt" ];then return 1 ; fi
}


TJ1_CK() {
if [ $(((${NUM[$1-2]}*100+${NUM[$1-1]}*10+${NUM[$1]})%2)) -eq 0 ];then
        return 1
fi
}


TJ2_CK() {
if [ $(((${NUM[$1-6]}*100+${NUM[$1-3]}*10+${NUM[$1]})%2)) -eq 0 ];then
        return 1
fi
}

for (( i1=1;i1<=9;i1++ ))
   do
        NUM[1]=$i1
        for (( i2=1;i2<=9;i2++ ))
           do
                NUM[2]=$i2
                XT_CK 2
                if [ $? -eq 1 ];then continue; fi
                for (( i3=1;i3<=9;i3++ ))
                   do
                        NUM[3]=$i3
                        XT_CK 3
                        if [ $? -eq 1 ];then continue; fi
                        TJ1_CK 3
                        if [ $? -eq 1 ];then continue; fi
                        for (( i4=1;i4<=9;i4++ ))
                           do
                                NUM[4]=$i4
                                XT_CK 4
                                if [ $? -eq 1 ];then continue; fi
                                for (( i5=1;i5<=9;i5++ ))
                                   do
                                        NUM[5]=$i5
                                        XT_CK 5
                                        if [ $? -eq 1 ];then continue; fi
                                        for (( i6=1;i6<=9;i6++ ))
                                           do
                                                NUM[6]=$i6
                                                XT_CK 6
                                                if [ $? -eq 1 ];then continue; fi
                                                TJ1_CK 6
                                                if [ $? -eq 1 ];then continue; fi
                                                for (( i7=1;i7<=9;i7++ ))
                                                   do
                                                        NUM[7]=$i7
                                                        XT_CK 7
                                                        if [ $? -eq 1 ];then continue; fi
                                                        TJ2_CK 7
                                                        if [ $? -eq 1 ];then continue; fi
                                                        for (( i8=1;i8<=9;i8++ ))
                                                           do
                                                                NUM[8]=$i8
                                                                XT_CK 8
                                                                if [ $? -eq 1 ];then continue; fi
                                                                TJ2_CK 8
                                                                if [ $? -eq 1 ];then continue; fi
                                                                for (( i9=1;i9<=9;i9++ ))
                                                                   do
                                                                        NUM[9]=$i9
                                                                        XT_CK 9
                                                                        if [ $? -eq 1 ];then continue; fi
                                                                        TJ1_CK 9
                                                                        if [ $? -eq 1 ];then continue; fi
                                                                        TJ2_CK 9
                                                                        if [ $? -eq 1 ];then continue; fi
##                                                                      echo ${NUM[@]}
                                                                        if [ $(((${NUM[1]}+${NUM[4]}+${NUM[7]})*100+(${NUM[2]}+${NUM[5]}+${NUM[8]})*10+${NUM[3]}+${NUM[6]}+${NUM[9]}*2+(${NUM[1]}+${NUM[2]}+${NUM[3]})*100+(${NUM[4]}+${NUM[5]}+${NUM[6]})*10+${NUM[7]}+${NUM[8]})) -eq 4446 ];then
                                                                        echo ${NUM[@]}
                                                                        fi
                                                                   done
                                                           done
                                                   done
                                            done
                                   done
                            done
                   done
           done
   done




第八题:
我的环境是SLES11SP2 32位
可以删除
SLES11SP2_32:~/ttt # ll
总用量 0
-rw-r--r-- 1 root root 0  6月 27 09:51 1 2 3.txt
-rw-r--r-- 1 root root 0  6月 27 09:51 1.txt
SLES11SP2_32:~/ttt # rm *
SLES11SP2_32:~/ttt # ll
总用量 0
SLES11SP2_32:~/ttt #

第九题:
SLES11SP2_32:~ # ls
bin  bs  Desktop  Documents  inst-sys  oracle.sh  test.sh  ttt
SLES11SP2_32:~ # hz=sh
SLES11SP2_32:~ # ls *.$hz
oracle.sh  test.sh
SLES11SP2_32:~ #

第十题:
1: find . ! -name "20130605*"
2/3/4:(两个目录分别为T1和T2,脚步和这两个目录在同一目录中)
#!/bin/bash
##2##
find ./T1/ ./T2/ -type f |while read i;do mv "$i" `echo $i |tr -d '[] '`;done

##3##
ls T1 |while read i
   do
        if [ -e T2/$i ];then
                diff T1/$i T2/$i >/dev/null
                if [ $? -eq 0 ];then
                        rm T2/$i
                fi
        fi
   done
##4##

ls T1/*.XQF T2/*.XQF |awk -F '[/.]' '{print $2}' |while read j
   do
        if [ -e T1/$j.che ];then rm T1/$j.che;fi
        if [ -e T2/$J.che ];then rm T2/$j.che;fi
done

论坛徽章:
0
110 [报告]
发表于 2013-07-01 23:08 |只看该作者
1. awk '{print $6}' illegal |sort -n|uniq -c|sort -n|tail -10

2.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP