18道Shell高级编程企业实战题及参考答案

Shell高级编程企业实战题参考解答

###########################################################################



 

目录:

1、监控MySQL主从同步... 1

2、批量创建文件及改名... 3

3、批量创建用户随机密码... 6

4、判断网络主机存活... 7

5、解决DOS攻击生产案例... 7

6、MySQL启动脚本... 8

7、分库备份... 11

8、分库分表备份... 11

9、打印字母数不大于6的单词... 12

10、比较2个整数大小... 15

11、打印选择菜单... 17

12、监控web、db服务... 20

    12.1 监控web服务... 20

        12.1.1本地端口判断... 20

        12.1.2本地进程判断... 20

        12.1.3远程端口判断... 21

        12.1.4获取返回内容判断... 22

        12.1.5根据状态码判断... 22

    12.2 监控db服务... 23

        12.2.1插入与查询的值对比判断... 23

        12.2.2返回值判断... 24

        12.2.3本地端口对比... 24

        12.2.4本地进程判断... 25

        12.2.5远程端口判断... 25

13、监控memcache服务... 26

14、监控web站点目录... 27

15、rsync的系统启动脚本... 29

16、抽奖... 31

17、破解密码... 34

18、批量检查多个网站地址是否正常... 35

 

1、监控MySQL主从同步

企业面试题1:监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:

阶段1:开发一个守护进程脚本每30秒实现检测一次。

阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。

阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)

 

模拟文本

  1. [root@oldboy~]# mysql -uroot-p'oldboy' -S /data/3307/mysql.sock -e "show slavestatus\G;"

  2. *************************** 1.row ***************************

  3.                Slave_IO_State:Waiting formaster to send event

  4.                   Master_Host:10.0.0.179   #当前的mysql master服务器主机

  5.                   Master_User: rep

  6.                   Master_Port: 3306

  7.                 Connect_Retry: 60

  8.               Master_Log_File:mysql-bin.000013

  9.          Read_Master_Log_Pos: 502547

  10.                Relay_Log_File:relay-bin.000013

  11.                 Relay_Log_Pos:251

  12.         Relay_Master_Log_File:mysql-bin.000013

  13.              Slave_IO_Running:Yes

  14.            Slave_SQL_Running: Yes

  15.               Replicate_Do_DB:

  16.          Replicate_Ignore_DB: mysql

  17.           Replicate_Do_Table:

  18.       Replicate_Ignore_Table:

  19.      Replicate_Wild_Do_Table:

  20. Replicate_Wild_Ignore_Table:

  21.                    Last_Errno: 0

  22.                    Last_Error:

  23.                  Skip_Counter: 0

  24.          Exec_Master_Log_Pos: 502547

  25.               Relay_Log_Space:502986

  26.               Until_Condition:None

  27.                Until_Log_File:

  28.                 Until_Log_Pos: 0

  29.           Master_SSL_Allowed: No

  30.           Master_SSL_CA_File:

  31.           Master_SSL_CA_Path:

  32.               Master_SSL_Cert:

  33.            Master_SSL_Cipher:

  34.                Master_SSL_Key:

  35.        Seconds_Behind_Master: 0   #和主库比同步延迟的秒数,这个参数很重要

  36. Master_SSL_Verify_Server_Cert: No

  37.                 Last_IO_Errno: 0

  38.                 Last_IO_Error:

  39.                Last_SQL_Errno: 0

  40.                Last_SQL_Error:

  

脚本

                             

  1. [root@shell scripts]# vicheck_mysql_slave.sh

  2. #!/bin/sh

  3. #2015-05-17

  4. # Source function library.

  5. /etc/init.d/functions

  6.   

  7. # Defined variables

  8. MysqlUser=root

  9. MysqlPass=oldboy123

  10. MysqlPort=3307

  11. Mysqlsock=/data/$MysqlPort/mysql.sock

  12. ErrorNo=(1158 1159 1008 10071062)

  13. errorlog=/tmp/error_skip.log

  14. MysqlCmd="/application/mysql/bin/mysql-u$MysqlUser -p$MysqlPass -S $Mysqlsock"

  15.   

  16. # Judge mysql server is ok?

  17. [ -S $Mysqlsock ] ||{

  18.     echo "Maybe MySQL have sometingwrong"

  19.     exit 1

  20. }

  21.   

  22. # Defined skip error Functions

  23. function error_skip(){

  24.     local flag

  25.     flag=0

  26.     for num in ${ErrorNo[@]}

  27.       do

  28.         if "$1" == "$num"];then

  29.            $MysqlCmd -e'stop slave;set globalsql_slave_skip_counter=1;start slave;'

  30.            echo "$(date +%F_%R) $1">>$errorlog

  31.         else

  32.            echo "$(date +%F_%R) $1">>$errorlog

  33.            ((flag++))

  34.         fi

  35.     done

  36.     "$flag" =="${#ErrorNo[@]}" ] &&{

  37.         action "MySQL Slave"/bin/false

  38.         uniq $errorlog|mail -s "MySQLSlave is error" [email protected]

  39.     }

  40. }

  41.   

  42. # Defined check slave Functions

  43. function check_slave(){

  44.     MyResult=`$MysqlCmd -e'show slavestatus\G'|egrep '_Running|Behind_Master|SQL_Errno' |awk '{print $NF}'`

  45.     array=($MyResult)

  46.     if "${array[0]}" =="Yes" -a "${array[1]}" == "Yes" -a"${array[2]}" == "0" ]

  47.       then

  48.         action "MySQL Slave"/bin/true

  49.     else

  50. error_skip ${array[3]}

  51.     fi

  52. }

  53.   

  54. # Defined main Functions

  55. function main(){

  56.     while true

  57.        do

  58.          check_slave

  59.          sleep 60

  60.     done

  61. }

  62. main


2、批量创建文件及改名 

企业面试题2:使用for循环在/oldboy目录下通过随机小写10个字母,批量创建10个html文件,名称例如为:

  1. [root@oldboy oldboy]# sh/server/scripts/oldboy.sh

  2. [root@oldboy oldboy]# ls -l

  3. total 0

  4. -rw-r--r-- 1 root root 0 Apr 1511:34 coaolvajcq_oldboy.html

  5. -rw-r--r-- 1 root root 0 Apr 1511:34 gmkhrancxh_oldboy.html

  6. -rw-r--r-- 1 root root 0 Apr 1511:34 jdxexendbe_oldboy.html

  7. -rw-r--r-- 1 root root 0 Apr 1511:34 qcawgsrtkp_oldboy.html

  8. -rw-r--r-- 1 root root 0 Apr 1511:34 qnvuxvicni_oldboy.html

  9. -rw-r--r-- 1 root root 0 Apr 1511:34 tmdjormaxr_oldboy.html

  10. -rw-r--r-- 1 root root 0 Apr 1511:34 ugaywanjlm_oldboy.html

  11. -rw-r--r-- 1 root root 0 Apr 1511:34 vfrphtqjpc_oldboy.html

  12. -rw-r--r-- 1 root root 0 Apr 1511:34 vioesjmcbu_oldboy.html

  13. -rw-r--r-- 1 root root 0 Apr 1511:34 wzewnojiwe_oldboy.html

  14. -rw-r--r-- 1 root root 0 Apr 1511:34 xzzruhdzda_oldboy.html

 

请用至少两种方法实现,将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。

 

  1. 2.1批量创建脚本

  2. [root@shell scripts]# vitouch2.sh 

  3. #!/bin/bash

  4. Path=/oldboy

  5. [ -d $Path ] || mkdir $Path

  6.   

  7. for i in `seq 10`

  8.   do

  9.      char=`echo $RANDOM|md5sum|cut -c 2-11|tr[0-9] [a-j]`

  10.      touch $Path/${char}_oldboy.html

  11. done

  12. [root@shell scripts]# shtouch2.sh   

  13. [root@shell scripts]# ll -h/oldboy/

  14. total 0

  15. -rw-r--r-- 1 root root 0 Apr 1107:49 aeddbiacdj_oldboy.html

  16. -rw-r--r-- 1 root root 0 Apr 1107:49 bccbacghba_oldboy.html

  17. -rw-r--r-- 1 root root 0 Apr 1107:49 bdhijefefb_oldboy.html

  18. -rw-r--r-- 1 root root 0 Apr 1107:49 bhfghjcgaa_oldboy.html

  19. -rw-r--r-- 1 root root 0 Apr 1107:49 ddaacedijc_oldboy.html

  20. -rw-r--r-- 1 root root 0 Apr 1107:49 ebcbbfabaf_oldboy.html

  21. -rw-r--r-- 1 root root 0 Apr 1107:49 ecafccebbi_oldboy.html

  22. -rw-r--r-- 1 root root 0 Apr 1107:49 egcdafafad_oldboy.html

  23. -rw-r--r-- 1 root root 0 Apr 1107:49 iehfcgfaef_oldboy.html

  24. -rw-r--r-- 1 root root 0 Apr 1107:49 ifddfaaicd_oldboy.html

  25.   

  26. 2.2批量改名

  27. [root@shell scripts]# vimv2.sh    

  28. #!/bin/bash

  29. Path=/oldboy

  30. [ -d $Path ] && cd $Path

  31. for file in `ls`

  32.  do

  33.      mv $file `echo $file|sed -e"s#oldboy#oldgirl#g" -e "s#html#HTML#g" `

  34. done

  35. [root@shell scripts]# sh mv2.sh

  36. [root@shell scripts]# ll -h/oldboy/

  37. total 0

  38. -rw-r--r-- 1 root root 0 Apr 1107:49 aeddbiacdj_oldgirl.HTML

  39. -rw-r--r-- 1 root root 0 Apr 1107:49 bccbacghba_oldgirl.HTML

  40. -rw-r--r-- 1 root root 0 Apr 1107:49 bdhijefefb_oldgirl.HTML

  41. -rw-r--r-- 1 root root 0 Apr 1107:49 bhfghjcgaa_oldgirl.HTML

  42. -rw-r--r-- 1 root root 0 Apr 1107:49 ddaacedijc_oldgirl.HTML

  43. -rw-r--r-- 1 root root 0 Apr 1107:49 ebcbbfabaf_oldgirl.HTML

  44. -rw-r--r-- 1 root root 0 Apr 1107:49 ecafccebbi_oldgirl.HTML

  45. -rw-r--r-- 1 root root 0 Apr 1107:49 egcdafafad_oldgirl.HTML

  46. -rw-r--r-- 1 root root 0 Apr 1107:49 iehfcgfaef_oldgirl.HTML

  47. -rw-r--r-- 1 root root 0 Apr 1107:49 ifddfaaicd_oldgirl.HTML

  48.   

  49. [root@shell scripts]# vimv3.sh    

  50. #!/bin/bash

  51. Path=/oldboy

  52. [ -d $Path ] && cd $Path

  53. for file in `ls`

  54.  do

  55.      mv $file `echo${file/oldboy.html/oldgirl.HTML}`

  56. done

  57. [root@shell scripts]# sh mv3.sh

  58. [root@shell scripts]# ll -h/oldboy/            

  59. total 0

  60. -rw-r--r-- 1 root root 0 Apr 1108:12 abcaeacdbe_oldgirl.HTML

  61. -rw-r--r-- 1 root root 0 Apr 1108:12 affabgbccg_oldgirl.HTML

  62. -rw-r--r-- 1 root root 0 Apr 1108:12 badbifffbg_oldgirl.HTML

  63. -rw-r--r-- 1 root root 0 Apr 1108:12 ccbcifibbe_oldgirl.HTML

  64. -rw-r--r-- 1 root root 0 Apr 1108:12 cchbacgegb_oldgirl.HTML

  65. -rw-r--r-- 1 root root 0 Apr 1108:12 cdfbjfdiib_oldgirl.HTML

  66. -rw-r--r-- 1 root root 0 Apr 1108:12 chjechdgab_oldgirl.HTML

  67. -rw-r--r-- 1 root root 0 Apr 1108:12 ghibcfcbee_oldgirl.HTML

  68. -rw-r--r-- 1 root root 0 Apr 1108:12 icafaafbdb_oldgirl.HTML

  69. -rw-r--r-- 1 root root 0 Apr 1108:12 igiijhbebj_oldgirl.HTML

3、批量创建用户随机密码

企业面试题3:批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。

  1. [root@shell scripts]# viuseradd.sh

  2. #! /bin/bash

  3. /etc/init.d/functions

  4.   

  5. Path=/server/scripts

  6. UserDb=$Path/user.db

  7. FailDb=$Path/fail_user.db

  8.   

  9. [ -d "$Path" ] || mkdir-p $Path

  10. [ -f "$UserDb" ] ||touch $UserDb

  11. [ -f "$FailDb" ] ||touch $FailDb

  12.   

  13. for in $(seq -w 10)

  14.  do

  15.     passwd=`echo $(date+%t%N)$RANDOM|md5sum|cut -c 2-9`

  16.     useradd oldboy$n >&/dev/null&& user_status=$?

  17.     echo "$passwd"|passwd --stdinoldboy$n >&/dev/null && pass_status=$?

  18.     if [ $user_status -eq 0 -a $pass_status -eq0 ];then

  19.        action "adduser oldboy$n"/bin/true

  20.        echo -e "user:\toldboy$npass:$passwd" >>$UserDb

  21.     else

  22.        action "adduser oldboy$n"/bin/false

  23.        echo -e "user:\toldboy$npass:$passwd" >>$FailDb

  24.     fi

  25. done

  26. [root@shell scripts]# shuseradd.sh           

  27. adduser oldboy01                                          [  OK  ]

  28. adduser oldboy02                                          [  OK  ]

  29. adduser oldboy03                                          [  OK  ]

  30. adduser oldboy04                                          [  OK  ]

  31. adduser oldboy05                                          [  OK  ]

  32. adduser oldboy06                                          [  OK  ]

  33. adduser oldboy07                                           [ OK  ]

  34. adduser oldboy08                                          [  OK  ]

  35. adduser oldboy09                                          [  OK  ]

  36. adduser oldboy10                                          [  OK  ]

  37. [root@shell scripts]# cat user.db

  38. user:   oldboy01 pass:f3291720

  39. user:   oldboy02 pass:457a9f30

  40. user:   oldboy03 pass:ff186389

  41. user:   oldboy04 pass:8f884b7c

  42. user:   oldboy05 pass:26f831b4

  43. user:   oldboy06 pass:344e2300

  44. user:   oldboy07 pass:0736b278

  45. user:   oldboy08 pass:67c1fa76

  46. user:   oldboy09 pass:b11e7aa9

  47. user:   oldboy10 pass:9e0c3673

 

4、判断网络主机存活

企业面试题4:写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多)

  1. #!/bin/sh

  2. for in `seq 254`

  3. do

  4.   ping -c1 10.0.0.$n &>/dev/null

  5.   if [ $? -eq 0 ]

  6.   then

  7.       echo "10.0.0.$n is up ">>/tmp/uplist.log

  8.   else

  9.       echo "10.0.0.$n is down ">>/tmp/downlist.log

  10.   fi

  11. done

5、解决DOS攻击生产案例

企业实战题5:请用至少两种方法实现!写一个脚本解决DOS攻击生产案例。

提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables-AINPUT -s 10.0.1.10 -j DROP。

  1. [root@shell scripts] # vi dos.sh
  2. #!/bin/bash
  3.   
  4. log= /tmp/tmp .log
  5.   
  6. [ -f $log ] ||  touch  $log
  7.   
  8. function  add_iptables(){
  9.      whileread line
  10.          do
  11.            ip=` echo  $line| awk  '{print $2}' `
  12.            count=` echo  $line| awk  '{print $1}' `
  13.              if  [ $count -gt 100 ] && [`iptables -L -n| grep  "$ip" | wc  -l` -lt 1 ]
  14.               then
  15.                  iptables -I INPUT -s $ip -jDROP
  16.                  echo  "$line isdropped"  >> /tmp/droplist .log
  17.              fi
  18.          done <$log
  19. }
  20.   
  21.   
  22. function  main(){
  23.      whiletrue
  24.             do
  25.               #awk '{print $1}' access.log|grep-v "^$"|sort|uniq -c >$log
  26.               netstat  -an| grep  EST| awk  -F  '[:]+'  '{print $6}' | sort | uniq  -c >$log
  27.               add_iptables
  28.               sleep  180
  29.      done
  30. }
  31.   
  32. main

6、MySQL启动脚本

企业实战题6:开发mysql多实例启动脚本:

已知mysql多实例启动命令为:mysqld_safe--defaults-file=/data/3306/my.cnf&

停止命令为:mysqladmin -u root -poldboy123 -S /data/3306/mysql.sockshutdown

请完成mysql多实例启动启动脚本的编写

要求:用函数,case语句、if语句等实现。

  1. [root@shell scripts] # vi mysqld1.sh
  2. #!/bin/bash
  3. # chkconfig: 2345 65 37
  4. # description: manager multiplemysqld server.
  5.   
  6. # Warning: This script uses the/etc/init.d/functions system function.
  7. #          System  kernel version isCentOS6.6,2.6.32-504.el6.x86_64.
  8. #          I'm not sure whether other systemscan be used normally.
  9. # Source function library.
  10. /etc/init .d /functions
  11.   
  12.   
  13. Port=$2
  14. datadir= /data/ $2
  15. Path= "/application/mysql"
  16. CmdPath= "$Path/bin"
  17. MysqlCmd= "$CmdPath/mysqld_safe"
  18. prog=mysqld
  19. Port=$2
  20. datadir= /data/ $2
  21. pidfile=${PIDFILE-$datadir /mysqld .pid}
  22. lockfile=${LOCKFILE- /var/lock/subsys/mysqld $Port}
  23. MysqlConf= "$datadir/my.cnf"
  24. RETVAL=0
  25.   
  26. Usage1(){
  27.          echo  -e  "\033[33m USAGE: $0 {startport|stop port|status port|restart port} \033[0m"
  28.          exit  6
  29. }
  30.   
  31. Usage2(){
  32.          echo  -e  "\033[33m MySQL DaemonProgram Need Configuration File,like $datadir/my.cnf \033[0m"
  33.          exit  6
  34. }
  35.   
  36. [ -n  "$Port"  -a  -z  "`echo" ${Port // [0-9]/} "`"  ] || Usage1
  37.   
  38. start(){
  39.          [ -x $MysqlCmd ] ||  exit  5
  40.          [ -f $MysqlConf ] || Usage2
  41.          echo  -n $ "Starting $prog: "
  42.          daemon --pidfile=${pidfile} "$MysqlCmd --defaults-file=$MysqlConf &>/dev/null &"
  43.          sleep  1
  44.          RETVAL=$?
  45.          echo
  46.          [ $RETVAL = 0 ] &&  touch ${lockfile}
  47.          return  $RETVAL
  48. }
  49.   
  50. stop(){
  51.          echo  -n $ "Stopping $prog: "
  52.          killproc -p $pidfile
  53.          retval=$?
  54.          echo
  55.          [ $retval - eq  0 ] &&  rm  -f${lockfile}
  56.          return  $retval
  57. }
  58.   
  59. restart() {
  60.          stop
  61.          sleep  1
  62.          start
  63. }
  64.   
  65. rh_status() {
  66.          status -p $pidfile
  67. }
  68.   
  69. rh_status_q() {
  70.          rh_status > /dev/null  2>&1
  71. }
  72.   
  73. case  "$1"  in
  74.      start)
  75.          rh_status_q &&  exit  0
  76.          $1
  77.          ;;
  78.      stop)
  79.          rh_status_q ||  exit  0
  80.          $1
  81.          ;;
  82.      restart)
  83.          $1
  84.          ;;
  85.      status)
  86.          rh_status
  87.          ;;
  88.      *)
  89.          Usage1
  90.          exit  2
  91. esac

7、分库备份

企业实战题7:如何实现对MySQL数据库进行分库备份,请用脚本实现

  1. [root@shell scripts] # vifenku_backup.sh 
  2. #!/bin/bash
  3. MysqlUser=root
  4. PassWord=oldboy123
  5. Port=3306
  6. Socket= "/data/$Port/mysql.sock"
  7. MysqlCmd= "mysql -u$MysqlUser-p$PassWord -S $Socket"
  8. Database=`$MysqlCmd -e  "showdatabases;" | egrep  - v  "Database|_schema|mysql" `
  9. MysqlDump= "mysqldump-u$MysqlUser -p$PassWord -S $Socket"
  10. IP=` ifconfig  eth0| awk  -F  "[:]+"  'NR==2 {print $4}' `
  11. BackupDir= /backup/ $IP
  12.   
  13. [ -d $BackupDir ] ||  mkdir  -p$BackupDir
  14.   
  15.   
  16. for  dbname  in  $Database
  17.    do
  18.       $MysqlDump --events -B $dbname| gzip >/$BackupDir/${dbname}_$( date  +%F)_bak.sql.gz
  19. done
  20. [root@shell 10.0.0.3] # ls
  21. chongtu_2015-04-11_bak.sql.gz  oldboy_2015-04-11_bak.sql.gz  test_2015-04-11_bak.sql.gz
  22. mysql_2015-04-11_bak.sql.gz    qqqqqq_2015-04-11_bak.sql.gz

8、分库分表备份

企业实战题8:如何实现对MySQL数据库进行分库加分表备份,请用脚本实现

  1. [root@shell scripts] # vifenbiao_backup.sh
  2. #!/bin/bash
  3. MysqlUser=root
  4. PassWord=oldboy123
  5. Port=3306
  6. Socket= "/data/$Port/mysql.sock"
  7. MysqlCmd= "mysql -u$MysqlUser-p$PassWord -S $Socket"
  8. Database=`$MysqlCmd -e  "showdatabases;" | egrep  - v  "Database|_schema|mysql" `
  9. MysqlDump= "mysqldump-u$MysqlUser -p$PassWord -S $Socket"
  10. IP=` ifconfig  eth0| awk  -F  "[:]+"  'NR==2 {print $4}' `
  11. BackupDir= /backup/ $IP
  12.   
  13. [ -d $BackupDir ] ||  mkdir  -p$BackupDir
  14.   
  15.   
  16. for  dbname  in  $Database
  17.    do
  18.       [ ! -d /$BackupDir/$dbname ] && mkdir  -p /$BackupDir/$dbname
  19.       TABLE=`$MysqlCmd -e  "show tables from$dbname;" | sed  '1d' `
  20.       for  table  in  $TABLE
  21.          do
  22.            $MysqlDump $dbname $table| gzip >/$BackupDir/$dbname/${dbname}_${table}_$( date  +%F).sql.gz
  23.       done
  24. done

9、打印字母数不大于6的单词

企业面试题9: bash for循环打印下面这句话中字母数不大于6的单词(昆仑万维面试题)。

Iam oldboy teacher welcome to oldboy training class.

请用至少两种方法实现!

  1. [root@shell scripts] # vi length.sh
  2. #!/bin/bash
  3.   
  4. echo  "-------wc -L----"
  5. for  word  in  I am oldboy teacherwelcome to oldboy training class.
  6.    do
  7.       if  [ ` echo  ${word}| wc  -L` - le  6 ]
  8.       then
  9.          echo  $word
  10.       fi
  11. done
  12.   
  13. echo "-----{#word}-----"
  14. for  word  in  I am oldboy teacherwelcome to oldboy training class.
  15.    do
  16.       if  [ ${ #word} -le 6 ]
  17.       then
  18.          echo  $word
  19.       fi
  20. done
  21.   
  22.   
  23. echo  "-----exprlength-----"
  24. for  word  in  I am oldboy teacherwelcome to oldboy training class.
  25.    do
  26.       if  [ ` expr  length  "$word" ` - le  6]
  27.       then
  28.          echo  $word
  29.       fi
  30. done
  31.   
  32. echo "-----{word:0:6}-----"
  33. for  word  in  I am oldboy teacherwelcome to oldboy training class.
  34. do
  35.      if  "$word"  == "${word:0:6}"  ]
  36.       then
  37.          echo  $word
  38.      fi
  39. done
  40.   
  41. echo  "-----awk-----"
  42. echo  "I am oldboy teacherwelcome to oldboy training class" | awk  '{for(i=1;i<=NF;i++)if(length($i)<=6)print $i}'
  43.   
  44. echo  "-----awk2-----"
  45. echo  -n  "I am oldboy teacherwelcome to oldboy training class."  awk  'BEGIN {RS=FS} length($0)<=6{print $0}'
  46.   
  47.   
  48. echo  "-----数组-----"
  49. arr=(I am oldboy teacher welcometo oldboy training class.)
  50. for  word  in  ${arr[@]}
  51. do
  52.    if  [ ${ #word} -le 6 ]
  53.    then
  54.        echo  $word
  55.    fi
  56. done
  57.   
  58. echo -----------------------------
  59. for ((i=0;i<${ #arr[*]};i++))
  60. do
  61.      if  [ ${ #arr[$i]} -le 6 ]
  62.      then
  63.         echo  ${arr[$i]}
  64.      fi
  65. done
  66. [root@shell scripts] # shlength.sh  
  67. ------- wc  -L----
  68. I
  69. am
  70. oldboy
  71. to
  72. oldboy
  73. class.
  74. -----{ #word}-----
  75. I
  76. am
  77. oldboy
  78. to
  79. oldboy
  80. class.
  81. ----- expr  length-----
  82. I
  83. am
  84. oldboy
  85. to
  86. oldboy
  87. class.
  88. -----{word:0:6}-----
  89. I
  90. am
  91. oldboy
  92. to
  93. oldboy
  94. class.
  95. ----- awk -----
  96. I
  97. am
  98. oldboy
  99. to
  100. oldboy
  101. class
  102. -----awk2-----
  103. I
  104. am
  105. oldboy
  106. to
  107. oldboy
  108. class.
  109. -----数组-----
  110. I
  111. am
  112. oldboy
  113. to
  114. oldboy
  115. class.
  116. -----------------------------
  117. I
  118. am
  119. oldboy
  120. to
  121. oldboy
  122. class.

想从0开始成为这样的SHELL高手么?请猛戳:

我要成为shell高手


你可能感兴趣的:(18道Shell高级编程企业实战题及参考答案)