免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
51 [报告]
发表于 2013-06-19 19:06 |只看该作者
第一题:
awk '{print $NF}'|sort|uniq -c|head -10
第二题:
#!/bin/bash

DATE_10_MIN_AGO=`date -d '10 minutes ago' '+%a %d, %Y %H:%M:%S'`
START_NUM=`grep -n "$DATE_10_MIN_AGO" /data/log/wls_ms1.out|head -1`
if [ -z $START_NUM ]; then
        ERROR_NUM=0

else
        END_NUM=`cat -n /data/log/wls_ms1.out|tail -1|awk '{print $1}'`
        DISC=`expr $END_NUM - $START_NUM + 1`
        ERROR_NUM=`cat -n /data/log/wls_ms1.out|tail -$DISC|grep  -w '<Error>'|wc -l`
        
fi

if [ $ERROR_NUM = 0 ] ; then
        echo "There is no error information in last 10mins."
else
        /usr/local/bin/sendEmail -f alert_send@mailhost.com -t admin@ChinaUnix.net  -u "Argent: Error LOG" -m "There haves $ERROR_NUM error(s)"
fi

第三题        
#!/bin/bash

PATH=/opt/WebSphere/AppServer
LPATH=/var/ChinaUnix
echo   -e "*.log\n*heapdump*\n*.gz\n*.tar\n*.zip\n*.bak" > excludefile
for i in `seq 3 100`; do
DATE=`date +%w`
NOW=`date +%Y%m%d`
IP=192.168.1.${i}
FILENAME=${IP}_${NOW}
  case ${DATE} in
   0)
    ssh root@${IP} 'cd ${PATH};tar -zcvf  ${FILENAME}_full.tar.gz ${PATH}/profiles  -X excludefile --exclude=profile/bin  --exclude=profile/logs'
    scp ${IP}{PATH}/${FILENAME}_full.tar.gz ${LPATH}/
    ;;
   1|2|3|4|5|6)
    ssh root@${IP} 'cd ${PATH};tar -g king -zcvf  ${FILENAME}_increment_${DATE}.tar.gz ${PATH}/profiles  -X excludefile --exclude=profile/bin --exclude=profile/logs'
    scp ${IP}{PATH}/${FILENAME}_increment_${DATE}.tar.gz ${LPATH}/
    ;;
  esac
done
  
第四题
2个命令的效果是一样的.
command1 && command2 || command3
这个会执行command1如果成功执行command2如果失败执行command3
if command1
then
  command2
else
  command3
fi

这个会执行command1如果成功执行command2如果失败执行command3
第五题
echo "1234">/abcd;awk '{l=length;for(i=1;i<=l;i++) a+=substr($0,i,1)}END{print a}'  /abcd
第六题
1.date +%j
2.yesterday=`TZ=$TZ+num date +%Y%m%d`;echo ${yesterday}##hpux
第七题
感觉是算法的题。求大拿。
第八题

不可以。如果遇到—foo\ c之类的文件是删不掉的。rm -rf 是删不掉以-开头的文件。

第九题
pathname expansion 就是所谓的 wildcard 扩展。可以在CLI执行比如ls -l f*
而parameter expansion是指以$开头的变量如${parameter}。这类变量可以有替换,求长度,赋值等操作。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
52 [报告]
发表于 2013-06-19 20:58 |只看该作者
Shell_HAT 发表于 2013-06-19 18:43
只有shell版主可以看到所有回帖内容?还是所有版主都能看到回帖内容?
@send_linux


我找个别的版的版主看看,稍等哈

论坛徽章:
1
午马
日期:2013-09-01 15:14:32
53 [报告]
发表于 2013-06-19 21:29 |只看该作者
  1. CentOS release 5.3 (Final)
  2. GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

  3. 第一题:

  4. awk '{print $NF}' illegal.log | sort -n  | uniq -c | sort -nr | head -n10
  5.      70 220.250.52.66
  6.      36 220.250.58.170
  7.      30 220.250.58.171
  8.      29 220.250.52.90
  9.      28 220.250.58.172
  10.      27 142.4.117.83
  11.      23 111.73.45.13
  12.      22 222.186.26.26
  13.      19 74.91.23.27
  14.      16 91.237.249.67


  15. 第二题:
  16. #!/bin/sh
  17. export TZ=EST
  18. #DATE_BF_TEN=`date -d "10 minute ago" +"%b %d, %Y%l:%M:[0-9][0-9] %p"`
  19. DATE_BF_TEN=`date -d "Mar 28, 2013 7:46:51 PM EST" +"%b %d, %Y%l:%M:[0-9][0-9] %p"`
  20. FILENAME="wsl.log"
  21. TMP_FILE=`mktemp`
  22. awk "/$DATE_BF_TEN/{a=1}a"  ${FILENAME} |grep '<Error>' && echo "${FILENAME} has log" | mutt -s "ERROR LOG"  "admin@ChinaUnix.net"

  23. 第三题:

  24. #!/bin/sh

  25. WEEK=`date +"%w"`
  26. WEWKS=`date +"%W"`
  27. IPNET='192.168.1.'
  28. RDIR='/opt/WebSphere/AppServer/profiles/'
  29. LDIR='/var/ChinaUnix'
  30. IGORE="bin logs *.log "
  31. TAR_NAME=''

  32. [ -d $LDIR/$WEEK ] || mkdir $LDIR/$WEEK


  33. case $WEEK in
  34.         1,2,3,4,5,6)
  35.                 TAR_NAME=${WEEKS}.tar;;
  36.         7)
  37.                 TAR_NAME=${WEEKS}_FULL.tar;;
  38. esac

  39. for IP in `seq 3 100` ;
  40. do
  41.         ssh ${IPNET}${IP} -- "tar uvf /tmp/${IPNET}${IP}${TAR_NAME} /opt/WebSphere/AppServer/profiles/ --exclude=bin --exclude=logs --exclude=bin --exclude=*.log --exclude=*heapdump* --exclude=*.gz --exclude=*.tar --exclude=*.zip --exclude=*.bak && zip /tmp/${IPNET}${IP}${TAR_NAME}.gz /tmp/${IPNET}${IP}${TAR_NAME}"

  42.         scp ${IPNET}${IP}:/tmp/${IPNET}${IP}${TAR_NAME}.gz $LDIR/${WEEK}
  43.         tar tzvf $LDIR/${WEEK}/${IPNET}${IP}${TAR_NAME}.gz
  44.         [ $? -eq 0 ] && echo "${IP} OK"
  45. done

  46. 第四题:

  47. command1 && command2 || command3
  48. 等同于
  49. if command1
  50. then
  51.   command2
  52.   if [ $? -ne 0 ] ;
  53.   then
  54.     command3
  55.   fi
  56. else
  57.   command3
  58. fi

  59. 1和2任意一个结果为false都执行3
  60. if语句假如1为true在执行2后不考虑结果,不再执行3



  61. 第五题:
  62. echo  -e "1234 \n 2343235 \n 3333" | awk '{for(i=1;i<=length($0);i++){rst[NR]=rst[NR]+substr($0,i,1)}}END{for(var in rst){print rst[var]}}'
  63. 10
  64. 22
  65. 12


  66. 第六题:

  67. 1、date --date="2013-05-23" +"%j"
  68. 2、date --date="2013-05-23 1 day ago"

  69. 第八题:
  70. 可以删除带空格的文件
  71. *      All of the words but the zeroth.  This is a synonym for ‘1-$’.  It is not an error to use *  if
  72.               there is just one word in the event; the empty string is returned in that case.

  73. 第九题:
  74. [db2inst1@db2srv1 ~]$ pwd
  75. /home/db2inst1
  76. [db2inst1@db2srv1 ~]$ echo ${PWD/2/3}_{1,2,3}
  77. /home/db3inst1_1 /home/db3inst1_2 /home/db3inst1_3


  78. 第十题:
  79. 1、ls | grep -v 20130605

  80. 2、ls | while read i; do mv "$i" "`echo "$i" | tr -d ' []'`"  ; done

  81. 3、
  82. for i in ` cd dirA && ls ` ;
  83. do
  84. [[ -f dirB/${i} ]] && rm -rf dirB/${i} ;
  85. done

  86. 4、
  87. for i in `find . -name "*.che" -exec basename {} \;` ;
  88. do
  89.   find . -name ${i%.che}.XQF -exec ls $i \;;
  90. done

  91. 5、
  92. che=`find . -name  "*.che"` ;\
  93. for i in $che ; \
  94.   do find . -name "`basename ${i%.che}.XQF`" -exec rm -rf ${i} \;;
  95. done
复制代码

论坛徽章:
0
54 [报告]
发表于 2013-06-19 22:51 |只看该作者
第五题

for i in `seq 100`; do echo "123456" | cut -b $i; done | awk '{a=a+$1}END{print a}'

论坛徽章:
5
技术图书徽章
日期:2014-04-18 08:52:38午马
日期:2014-04-30 13:28:11摩羯座
日期:2014-11-07 13:34:122015年亚洲杯之日本
日期:2015-03-12 14:01:4915-16赛季CBA联赛之北京
日期:2017-06-28 17:25:56
55 [报告]
发表于 2013-06-20 09:06 |只看该作者
4) command1 && command2 || command3     command2为False时command3也执行?

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
56 [报告]
发表于 2013-06-20 09:09 |只看该作者
Shell_HAT 发表于 2013-06-19 18:43
只有shell版主可以看到所有回帖内容?还是所有版主都能看到回帖内容?
@send_linux


可以确定,别的版的版主看不到

论坛徽章:
0
57 [报告]
发表于 2013-06-20 10:41 |只看该作者
本帖最后由 ooooldman 于 2013-06-25 22:01 编辑

Display Julian dates

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
58 [报告]
发表于 2013-06-20 14:01 |只看该作者
本帖最后由 chenyx 于 2013-06-20 14:02 编辑

1.
  1. awk '{print $NF}' illegal.log | sort | uniq -c | sort -n -k1 -r  | head -10
  2. awk '{print $NF}' illegal.log | sort | uniq -c | sort -n | tail -10
复制代码

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
59 [报告]
发表于 2013-06-20 14:32 |只看该作者
chenyx 发表于 2013-06-20 14:01
1.


哈哈,老兄也来参加这个活动啦

论坛徽章:
0
60 [报告]
发表于 2013-06-20 14:38 |只看该作者
本帖最后由 cyaln 于 2013-06-27 12:02 编辑

第一题

  1. #!/bin/bash
  2. awk -F '\t' '{print $6}' illegal.log | sort > newfile.log
  3. awk '{a[$0]++}END{for (b in a)print a[b],b}' newfile.log | sort -nr | head -n 10
  4. rm -rf newfile.log
复制代码

  1. ----------------------RESULT-------------------
  2. 70 220.250.52.66
  3. 36 220.250.58.170
  4. 30 220.250.58.171
  5. 29 220.250.52.90
  6. 28 220.250.58.172
  7. 27 142.4.117.83
  8. 23 111.73.45.13
  9. 22 222.186.26.26
  10. 19 74.91.23.27
  11. 16 91.237.249.67
复制代码
第二题

  1. #!/bin/bash
  2. f=/tmp/wls_ms1.out
  3. for n in 10 9 8 7 6 5 4 3 2 1
  4. do
  5.         m10=$(date -d "${n} minutes ago" "+%k:%M")
  6.         echo $m10
  7.         data=$(awk '/'"$m10"'/, /^b/{print $0}' $f  |grep 'Error')
  8.         if  [[   -n $data   ]]; then
  9.                 echo "$data" | mail -s 'Error'  admin@ChinaUnix.net
  10.                 exit 0
  11.         else
  12.                 :
  13.         fi
  14. done
复制代码
第三题
  1. we=$(data +%w)

  2. #差异备份
  3. cb () {
  4.         for n in $(seq 3 100)
  5.         do
  6.         ssh 192.168.1.${n} << EOF
  7.         find  /opt/WebSphere/AppServer/profiles   -mtime 1   -type f ! -name "*.log"    ! -name "*heapdump*" ! -name "*.gz" ! -name "*.tar" ! -name ".zip" ! -name "*.bak" |egrep -v  "/bin|/log" > /tmp/$.log
  8.         tar -cz -T /tmp/$.log  -f /tmp/$n.tar.gz
  9.         scp  /tmp/${n}.tar.gz  192.168.1.2:/var/ChinaUnix/
  10.         EOF
  11.         done
  12. }


  13. #完全备份
  14. wb () {
  15.         for n in $(seq 3 100)
  16.         do
  17.         ssh 192.168.1.${n} << EOF
  18.         find  /opt/WebSphere/AppServer/profiles     -type f ! -name "*.log"    ! -name "*heapdump*" ! -name "*.gz" ! -name "*.tar" ! -name ".zip" ! -name "*.bak" |egrep -v  "/bin|/log" > /tmp/$.log
  19.         tar -cz -T /tmp/$.log  -f /tmp/$n.tar.gz
  20.         scp  /tmp/${n}.tar.gz  192.168.1.2:/var/ChinaUnix/
  21.         EOF
  22.         done
  23. }

  24. if [[ "$we" -eq  0  ]]; then
  25.         wb
  26. else
  27.         cb
  28. fi
复制代码
第四题

  1. 1. command1 && command2 || command3 此种表达式是一个完整的判断,意味着command1 和command2 同时成立,如果有一个不成立,则执行command3
  2. 2. if command1 then command2 else command3 fi 此种表达式是一个if-else结构的,意味着若command1为真执行command2,反之command1为假执行command3.
复制代码
第五题

  1. #!/bin/bash
  2. declare -i rock=0
  3. NUM=$1
  4. for((i=0;i<${#NUM};i++));
  5. do
  6.     rock=rock+${NUM:$i:1};
  7.     echo $rock;
  8. done
复制代码

  1. ----------------------RESULT-----------------------
  2. ./script_name 12345
  3. 15
复制代码
第六题

  1. #!/bin/bash

  2. REFYR=1600   #refernce year
  3. MIY=12
  4. DIM=31

  5. day=
  6. month=
  7. year=

  8. Param_Error()
  9. {
  10.     echo "Usage: `basename $0` YYYY-[M]M-[D]D or your input invalid date"
  11.     echo "       (date must be after 1600-1-1)"
  12.     exit 99
  13. }

  14. # echo $1 | awk -F '-' '{print $1 $2 $3}'
  15. Parse_Date()
  16. {
  17.     dm=${1#**-}
  18.     month=${dm%-*}
  19.     day=${dm#*-}
  20.     year=${1%%-**}
  21. }

  22. check_date()
  23. {
  24.     if [ $year -le $REFYR ]; then
  25.         #echo "$year is invalid year."
  26.         Parse_Date
  27.     fi


  28.     if [ $month -le 0 -o $month -gt $MIY ]; then
  29.         #echo "$month is invalid month."
  30.         Parse_Date
  31.     fi

  32.     # Find out number of days in given month
  33.     case $month in
  34.         1) days=31;;
  35.         01) days=31;;
  36.         2) days=28 ;;
  37.         02) days=28 ;;
  38.         3) days=31 ;;
  39.         03) days=31 ;;
  40.         4) days=30 ;;
  41.         04) days=30 ;;
  42.         5) days=31 ;;
  43.         05) days=31 ;;
  44.         6) days=30 ;;
  45.         06) days=30 ;;
  46.         7) days=31 ;;
  47.         07) days=31 ;;
  48.         8) days=31 ;;
  49.         08) days=31 ;;
  50.         9) days=30 ;;
  51.         09) days=30 ;;
  52.         10) days=31 ;;
  53.         11) days=30 ;;
  54.         12) days=31 ;;
  55.         *) days=-1;;
  56.         esac

  57.         # find out if it is a leap year or not

  58.         if [ $month -eq 2 ]; then
  59.         # if it is feb month then only check of leap year
  60.             if [ $((year % 4)) -ne 0 ] ; then
  61.                 : #  not a leap year : means do nothing and use old value of days
  62.             elif [ $((year % 400)) -eq 0 ] ; then
  63.                 # yes, it's a leap year
  64.                 days=29
  65.             elif [ $((year % 100)) -eq 0 ] ; then
  66.                 : # not a leap year do nothing and use old value of days
  67.             else
  68.                 # it is a leap year
  69.                 days=29
  70.             fi
  71.         fi

  72.     if [ $day -le 0 -o $day -gt $days ]; then
  73.         #echo "$day is invalid day."
  74.         Parse_Date
  75.     fi

  76.     return $days
  77. }

  78. Parse_Date $1
  79. check_date $day $month $year

  80. ######### 6.1  calc days
  81. D=`cal -j $month $year | awk 'NR>2' | tr '\n' ' ' | awk -v t="$day" '{print $t}'`
  82. echo "Today is the $D days in this year!!!"

  83. ######### 6.2  calc yesterday
  84. if [ $day -gt 1 ]
  85. then
  86.     let "day = $day - 1"   
  87. else
  88.     if [ $month -gt 1 -a $month -ne 3 ]
  89.     then
  90.         let "month = $month -1"
  91.     elif [ $month -eq 1 ]
  92.     then
  93.         month=$MIY
  94.         day=$DIM
  95.         let "year = $year -1"
  96.         check_date $day $month $year
  97.     else
  98.         let "month = $month -1"
  99.         [ `echo $(($year%4==0&&$year%100!=0||$year%400==0))` -eq 1 ] && day=29 || day=28
  100.     fi
  101. fi

  102. yesterday=$year-$month-$day
  103. echo "Yesterday is $yesterday !!!"
复制代码

  1. ------------------------RESULT--------------------------
  2. ./script_name 2013-06-23
  3. Today is the 175 days in this year!!!
  4. Yesterday is 2012-06-22 !!!
复制代码
第七题

  1. 说明
  2. 1.程序中出现array=(8)。根据权重值,九宫格的第一行第一列的值为7or8,由于  需要满足题目的另外一个要求,所以这里必须为8. (权重计算: 1.1 200 1.2 110 1.3 101 2.1 110 2.2 20 2.3 11 3.1 101 3.2 11 3.3 2 由于4446是指定的结果,可以当做极限值. 故1.1的值范围200*x>4446/666*200,x=7 or 8)
  3. 2.程序中出现array[${#array[@]}+1]=1。根据行、列值必须是奇数,所以1.3 2.3 3.1 3.2 3.3为奇数,而且1-9中所有奇数和的个位数为5,必须+1才为6.此时只有3.3是被多加了1次.故3.3也必须为1.
  4. 3.判断奇偶按位写是难点。
  5. 4.程序还是有不足的地方,就是array[1]的值恒为空,没时间弄了(女儿要睡觉了),求达人解惑。
  6. 5.求完美、高效答案
复制代码

  1. #!/bin/bash

  2. RANGE=10
  3. Rows=3
  4. Columns=3
  5. TOP=9
  6. declare -a array
  7. declare -a alpha
  8. declare -a a=(3 5 7 9)
  9. declare -a b=(8 7 4)
  10. declare -a c=(6 5 3)

  11. # 按位计算
  12. cal()
  13. {
  14.     let "sum = ${array[0]}*200 + ${array[2]}*110 + ${array[3]}*101 + ${array[4]}*110 + ${array[5]}*20 + ${array[6]}*11 + ${array[7]}*101 + ${array[8]}*11 + ${array[9]}*2"
  15. }

  16. #将计算的值按位进栈
  17. push()
  18. {
  19.     until [ $# -eq 0 ]
  20.     do
  21.         let "TOP = $TOP - 1"
  22.         if [ -z $1 ]
  23.         then
  24.             :
  25.         else
  26.             array[$TOP]=$1
  27.         fi
  28.         shift
  29.     done
  30.     return
  31. }

  32. create_array()
  33. {
  34.     array=(8)
  35.     [ -f array.file ] && rm -rf array.file
  36.     while :
  37.     do
  38.         let "i = $RANDOM*$RANGE/32767"
  39.         if [[ "${a[@]}" =~ "$i" ]]
  40.         then
  41.             T=1
  42.         else
  43.             T=0
  44.         fi
  45.         if [[ "$i" -ne "0" && "$i" -ne "1" && "$i" -ne "10" ]]
  46.         then
  47.             if [[ "${array[@]}" =~ "$i" ]]
  48.             then
  49.                 :
  50.             elif [ "$T" -eq "1" ]
  51.             then
  52.                 #奇数
  53.                 lno=`echo ${!array[@]} | awk '{print $2}'`
  54.                 if [[ "${b[@]}" =~ "$lno" ]]
  55.                 then
  56.                         push $i
  57.                 fi
  58.             else
  59.                 #偶数
  60.                 lno=`echo ${!array[@]} | awk '{print $2}'`
  61.                 if [[ "${c[@]}" =~ "$lno" && ! -z "$lno" ]]
  62.                     then
  63.                         push $i
  64.                 fi
  65.             fi
  66.         fi
  67.     [ ${#array[@]} -eq 8 ] && break
  68.     done
  69.     array[${#array[@]}+1]=1
  70.     for ((i=0; i<=${#array[@]}; i++))
  71.     do
  72.         echo ${array[$i]} >> array.file
  73.     done
  74.     TOP=9
  75. }

  76. # copy from : advance bash program 26-16
  77. load_alpha()
  78. {
  79.     local rc=0
  80.     local index

  81.     for i in `cat array.file`
  82.     do
  83.         local row=`expr $rc / $Columns`
  84.         local column=`expr $rc % $Rows`
  85.         let "index = $row * $Rows + $column"
  86.         alpha[$index]=$i
  87.         let "rc += 1"
  88.     done
  89. }
  90. # copy from : advance bash program 26-16
  91. print_alpha()
  92. {
  93.     local row=0
  94.     local index

  95.     echo

  96.     while [ "$row" -lt "$Rows" ]
  97.     do
  98.         local column=0
  99.         echo -n " "
  100.         while [ "$column" -lt "$Columns" ]
  101.         do
  102.             let "index = $row * $Rows + $column"
  103.             echo -n "${alpha[index]}"
  104.             let "column += 1"
  105.         done

  106.         let "row += 1"
  107.         echo
  108.     done
  109.     echo
  110. }

  111. main()
  112. {
  113.     while :
  114.     do
  115.         create_array
  116.         load_alpha
  117.         cal
  118.         if [ "$sum" == "4446" ]
  119.         then
  120.             print_alpha
  121.             break
  122.         else
  123.             :
  124.         fi
  125.     done
  126. }

  127. for ((i=0;i<2;i++))
  128. do
  129.     main >> result.log
  130. done

  131. awk 'BEGIN{RS='\n';ORS="\n\n";OFS=FS="\n";}{c[$0]++}END{for (b in c)print b}' result.log
  132. rm -f array.file
复制代码

  1. ---------------------------RESULT---------------------------
  2. 869      849      847      867      847      849      867      869      
  3. 423      623      623      423      625      625      425      425
  4. 751      751      951      951      931      931      931      731
复制代码
第八题

  1. 可以删除. 因为*是通配符,匹配0个或多个.而有空格的文件,一般会以反斜杠加空格的表示空格 [redhat 2.6.18-194.el5 验证]
复制代码
第九题

  1. bash执行的数序就是如下:
  2. brace expansion,
  3. tilde expansion,
  4. parameter、variable、arithmetic expansion 、command substitution
  5. word splitting
  6. pathname expansion

  7. 例子:
  8. echo "${!var^^}"
  9. # ...is equivalent to
  10. eval 'echo "${'"$var"'^^}"'
复制代码
第十题

  1. 1. ls | grep -v  '^20130605'
  2. 2. for ((i=1;i<`ls | wc -l`;i++));do mv   "$(ls |sed  -n ${i}p)"  "$(ls |sed  -n ${i}p|sed  -e  's/\[//g' -e 's/\]//g' -e 's/ //g' )";done
  3. 3.
  4. #!/bin/bash
  5. for n in $(ls dirA)
  6. do
  7. if [[ -f dirA/${n} && -f dirB/${n} ]]
  8. then
  9.     diff dirA/${n} dirB/${n} >/dev/null
  10.     if [ "$?" -eq 0 ]
  11.     then
  12.         rm -rf dirB/${n}
  13.     else
  14.         :
  15.     fi
  16. fi
  17. done
  18. 4.
  19. #!/bin/bash
  20. for n in  $(ls dira/ dirb/ |awk '!/dirb\/:|dira\/:/{print $0}')
  21. do
  22.     m=$(echo $n |awk -F '.' '/XQF$/{print $1}')
  23.     rm -f dira/${m}.che
  24.     rm -f dirb/${m}.che
  25. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP