高阶Shell/Tensorflow

4.8  分析下列shell脚本的功能:

count=$#

         cmd=echo

         while[  $count  –gt  0  ]

         do

                  cmd=”$cmd  \$$count”

                  ((count=count-1))

         done

         eval  $cmd

答:该脚本的功能是:逆向输出用户在命令行上提供的各个参数。例如,设该脚本名是ABC,执行该脚本的命令行是:$ ABC  apple  big  cat  dog 

则结果输出是:dog  cat  big  apple

4.9  编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。

答:上机实践题。参考脚本如下:

       #!/bin/bash

      

count=$#

if [  -d  “$1”  ]

       then

              n=2

        dir=$1

while [  $n  –le  $count  ]

           do

                     if [  -f  $2  ]

then  cp  $2  $dir

else  echo  “$2  is  not an ordinary  file.”

fi

shift

                     ((n=n+1))

              done

       else  echo  “$1  is  not  a  directory.”

fi

4.10  编写一个shell脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中,就发一个问候给他。

答:上机实践题。参考脚本如下:

       #!/bin/bash

      

       date

       echo  “Input  a  user  name  for  searching”

       read  name

       if  who|grep  “$name”

       then

              echo  “Lucky, there  is  $name in  my  system  now.”

              echo  “Hi,how are you!” > /var/spool/mail/$name

       else  echo  “Unlucky, there  is not  $name in  my  system.”

       fi

4.11  打印给定目录下的某些文件,由第一个参数指出文件所在的目录,其余参数是要打印的文件名。

答:上机实践题。参考脚本如下:

       #!/bin/bash

      

       count=$#

 if [  -d  “$1”  ]

        then

              cd  $1

n=2

           while[  $n  –le  $count  ]

           do

                     if [  -f  $2  ]

then  cat  $2

else  echo  “Sorry, cannot  display  $2.”

fi

shift

                     ((n=n+1))

              done

       else  echo  “$1  is  not  a  directory.”

fi

4.12  利用for循环将当前目录下的 .c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。

答:上机实践题。参考脚本如下:

       #!/bin/bash

       echo  “Input  the  name  of  a  directory.”

       read  dir

if [  -d  $dir  ]

       then

for  name  in  *.c

              do

                     mv  $name  dir

              done

ls  -S  dir

              ls  dir

       else  echo  “Sorry!$dir  is  not  a  directory.”

       fi

4.13  利用数组形式存放10个城市的名字,然后利用for循环把它们打印出来。

答:上机实践题。参考脚本如下:

#!/bin/bash

city=( Beijing Shanghai Tianjin Guangzhou Chongqing Hangzhou Nanjing Shenyang Taiyuan Jinan)

for i in ${city[*]}

do

echo $i

done

4.14  编写一个shell脚本,求费波纳奇数列的前10项及总和。

答:上机实践题。参考脚本如下:

       #!/bin/bash

       fib[1]=1

fib[2]=1

       n=3

       ((sum= fib[1]+fib[2]))

       while [  $n  –lt  10  ]

       do

              ((fib[n]=fib[n-1]+fib[n-2]))

              ((fib[n+1]=fib[n-1]+fib[n]))

              ((sum=sum+fib[n]+fib[n+1]))

              ((n=n+2))

       done

       for ((i=1;i<=10;i++))

       do

              echo  ${fib[i]}

       done

       echo  $sum

4.15  下述表达式的作用是什么?

${ name[*] }                   ${ name[@] }           ${ name #*/ }

${ name %%.* }                ${ #name[*] }         ${ name:-Hello }

答:${name[*]}和${name[@]}  都表示数组name中所有非空元素的值,每个元素的值用空格分开。

${ name #*/ }  如果name值的开头包含模式*/,那么该表达式的值就是name中去掉最少匹配*/部分后的结果;否则,就是name的值。

${ name %%.* } 如果name值的末尾包含.*,那么该表达式的值就是name中去掉最多匹配.*部分后的结果;否则,就是name的值。

${#nane[*]}的值是数组name中已经设置的元素的个数。

${ name:-Hello }  如果name的值为空,则整个表达式的值等于给定的字符串Helloname保持不变;否则,整个表达式的值等于name的值,name保持不变。

4.16  显示前面所执行的40个命令的清单,重新执行倒数第5条命令。编辑其中一条命令,然后执行。

答:上机实践题。

$ history 40

$ !-5

然后,按↑键或↓键,找到你要编辑的命令;

进行编辑;

按Enter键,执行该命令。

4.17  定义一个别名命令,它等价的功能是:显示当前日期及工作目录,并列出有多少用户在系统上工作。

答:上机实践题。

$ alias  cmd=’date;pwd;who|wc –l’

$ cmd

4.18  设计一个程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,nm都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:

$ cuts  11  14

this is a test of cuts program (输入)

test (显示结果)

答:上机实践题。参考脚本如下:

#!/bin/bash 

read  -p  "Input a string: "  str

echo  $str | cut  -c  $1-$2

猜你喜欢

转载自www.cnblogs.com/SxSeQzS/p/10162671.html