码迷,mamicode.com
首页 > 系统相关 > 详细

Linux实验4shell编程(2)

时间:2018-06-03 17:36:39      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:mep   eva   amp   去掉   tar.gz   and   copy   sources   出现   

shell编程(2)

1. shell变量基本用法及常用符号使用

(1)将主题示符改为用户的主目录名

? 技术分享图片

(2)将字符串 DOS file c:>$student*赋值给变量 x,并显示出来

? 技术分享图片

(3)在 shell 命令终端输入 likes=(cosmos galaxy moon); likes[6]=mars,然后使用 echo 分别显示以下表达式 的值,并结合结果,写出表达式的作用。

? 技术分享图片

  • ${likes[*]}的作用:显示所有非空元素
  • ${like[@]}的作用:同上,元素值中嵌入的字符作为字段分隔符出现
  • ${#like[*]}的作用:显示已设置元素值的个数
  • ${#like[@]}的作用:同上

    (4)在 shell命令终端输入name=Phoenix,然后使用echo显示表达式①,观察结果;然后输入命令unset name, 再输入表达式①观察结果。结合两次结果,写出表达式的作用。

    技术分享图片

  • 用参数置换为变量赋值,如果变量的值为空,输出的结果为给定的字符,否则讲字符串赋给变量name

(5)在 shell命令终端输入name=‘/usr/share/doc/apg/php.tar.gz‘,然后使用echo分别显示表达式①和②的值, 观察结果。

? 技术分享图片

  • ${name%%.*}的作用:去掉第一格式中匹配最多部分的值
  • ${name%.*}的作用:如果%%前后的内容末尾匹配,则去掉末尾匹配的值

    (6)在 shell 命令终端输入 name=/usr/bin/X11,然后使用 echo 分别显示表达式①和②的值,观察结果。 修改 name 的值,让 name=‘/etc/apt/sources.list.d‘,再次使用 echo 分别显示表达式①和②的值,观察结果。 结合结果,写出表达式的作用。

? 技术分享图片

  • ${name#*/}:去掉与name值开头匹配部分的值
  • ${name##*/}:去掉上面格式中匹配的部分

(7)已知某同学提交的博客文章页面地址 address 如下: address=‘http://www.cnblogs.com/xyz/p/8569001.html‘ 通过字符串匹配,如何得到其博客主页地址: homepage

   #!/bin/bash
   address="‘http://www.cnblogs.com/xyz/p/8569001.html‘"
   homepage="homepage=""${address%/p*}""‘"
   echo $homepage

技术分享图片

2. shell脚本分析

(1)

   #!/bin/bash
   # p145 4.8
   
   count=$#
   cmd=echo
   while [ $count -gt 0 ]
   do
           cmd="$cmd \$$count"
           count=`expr $count - 1`
   done
   eval $cmd

技术分享图片

  • 执行. ex1.sh时,没有带参数,不符合while语句,所以没有输出
  • 执行. ex1.sh best wishes时,有两个参数,满足条件,最后运行cmd命令
  • 执行. ex1.sh god bless u时,原理同上
  • 作用是倒叙输出
  • 有几个参数就循环几次
  • 执行. ex1.sh god bless u时第八行cmd执行后为echo $3

(2)

   #!/bin/bash
   # p145 4.10
   
   IS_USER_FOUND=0
   date +%F
   if who | grep "^$1"; then
           IS_USER_FOUND=1;
           write $1 <<Limitstring
           hello
   Limitstring
   fi
   
   if [ $IS_USER_FOUND -eq 0 ]; then
           echo "user $1 is not found."
   fi

技术分享图片

  • 第6行,用于判断用户名是否正确
  • 第8-10行,讲第一个参数重定向,向其发送hello

(3)

   #!/bin/bash
   
   suffix=BACKUP--`date +%Y%m%d-%H%M`
   
   for script in *.sh; do
     newname="$script.$suffix"
     echo "Copying $script to $newname..."
     cp $script $newname
   done

技术分享图片

  • 将当前文件夹中的sh格式文件copy

(4)

   !/bin/bash
   # realize function same as Command cat -n
   
   function NL() {
           while read x
           do
                   (( ++line ))
                   echo "$line $x"
           done
   }
   
   
   line=0
   if [ $# -eq 0 ]; then
           NL
   else
           while [ "$1" ] && [ -f "$1" ]
           do
                   NL < $1
                   shift
           done
   fi

技术分享图片

技术分享图片

技术分享图片

  • 4-10行中的函数的作用是将用户输入的值保存在变量x中,然后输出行号和x的值
  • 14行,执行
  • 17-21,接受用户输入,将参数左移一位

3. shell脚本编写

(1)

   #!/bin/bash
   dir=$1
   shift
   for script in $@
   do
   cp $1 $dir
   done

技术分享图片

(2)

   #!/bin/bash
   cd $1
   shift
   while [ $1 ]
   do
   file=$1
   cat $1
   shift
   done

技术分享图片

(3)

   #!/bin/bash
   for script in *.c
   do
   mv $script $x
   done
   cd $x
   ls -Sl

技术分享图片

(4)

   #!/bin/bash
   read str
   echo $str | cut -c $1-$2

技术分享图片

(5)

   #!/bin/bash
   echo "Please input the num(1-100) "  
       read num
   radent=$((RANDOM%))
   
       while [[ "$num" != $radent ]]  
       do
          if [ "$num" -lt $radent ]
          then
               echo "small"  
               read num
          elif [ "$num" -gt $radent ]
          then
                echo "high"   
                read num
           fi
       done
   
       echo "Yes! "

技术分享图片

Linux实验4shell编程(2)

标签:mep   eva   amp   去掉   tar.gz   and   copy   sources   出现   

原文地址:https://www.cnblogs.com/lth1005/p/9129561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!