Linux实验4shell编程

Posted lth1005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux实验4shell编程相关的知识,希望对你有一定的参考价值。

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 [email protected]
   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编程的主要内容,如果未能解决你的问题,请参考以下文章

4shell中的特殊变量

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

MOOC《Linux操作系统编程》学习笔记-实验四

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

20179223《Linux内核原理与分析》第十一周学习笔记

Note4shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,peci,软连接