Linux实验4shell编程(2)

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! "

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

时间: 2024-11-14 12:21:37

Linux实验4shell编程(2)的相关文章

Linux实验4_shell编程(2)

一.实验内容 四块:1.shell变量基本用法及常规符号使用.2.shell中脚本分析.3.shell脚本编写.4.修改配置文件定制个性化操作系统或编写设立了实现任务的自动化处理. 二.实验步骤 1.shell变量基本用法及常规符号使用 (1)将主提示符改为用户的主目录名 (2)将字符串DOS       file        c:>\$student\*赋值给变量x,并显示出来 关于多个空格,一开始用 echo $x 结果总是只显示一个空格,上网查阅后得知,应该写成 echo "$x&

Linux 实验 —— shell 编程

转载请注明:http://blog.csdn.net/wujysh 1. 查看当前系统下用户 shell 定义的环境变量的值. 2. 定义变量 AK 的值为 200,并将其显示在屏幕上. 3. 定义变量 AM 的值为 100,并使用 test 命令比较其值是否大于 150. 4. 创建一个简单的 shell 程序,其功能为: 1) 将主机名改为你的名字汉语拼音字母; 2) 显示计算机主机名以及显示系统日期和时间. 5. 使用 if-then-else 语句创建一个根据输入的分数判断分数是否及格的

Linux下的编程实战【转】

一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台的),进程控制与进程通信编程 1.Linux进程 Linux进程在内存中包含三部分数据:代码段.堆栈段和数据段.代码段存放了程序的代码.代码段可以为机器中运行同一程序的数个 进程共享.堆栈段存放的是子程序(函数)的返回地址.子程序的参数及程序的局部变量.而数据段则存放程序的全局变量.常数以及动态数

Linux内核驱动编程

Linux内核驱动编程 2015-02-12 驱动程序基础的东西这儿就不罗嗦了,百度上有更好的资料,此处我们只是注重实际用处. 下面我们开始写程序: 一.初步helloword程序 首先是来一个简单的hello. hello.c代码: 1 /****************************** 2 3 the first program 4 5 Hello World! 6 7 ******************************/ 8 9 #include <linux/mod

Linux高性能服务器编程——Linux网络基础API及应用

 Linux网络编程基础API 详细介绍了socket地址意义极其API,在介绍数据读写API部分引入一个有关带外数据发送和接收的程序,最后还介绍了其他一些辅助API. socket地址API 主机字节序和网络字节序 字节序分为大端字节序和小端字节序.小端字节序又被称为主机字节序,大端字节序被称为网络字节序.大端字节序是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处.小端字节序则相反. Linux提供如下四个函数完成主机字节序与网络字节序之间的转换: #include

Linux进程控制编程

一.获取ID #include<sys/types.h> #include<unistd.h> pid_t getpid(void)    获取本进程ID pid_t getppid(void)  获取父进程ID 父进程:现有进程中,创建新的进程. 例:getpid.c #include<stdio.h> #include<unistd.h> #include<stdlib.h> int main() { printf("PID=%d\

Linux高性能服务器编程——定时器

 定时器 服务器程序通常管理着众多定时事件,因此有效组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响.位置我们要将每个定时事件封装成定时器,并使用某种容器类型的数据结构,比如链表.排序链表和时间轮将所有定时器串联起来,以实现对定时事件的统一管理. Linux提供三种定时方法: 1.socket选项SO_RECVTIMEO和SO_SNDTIMEO. 2.SIGALRM信号 3.I/O复用系统调用的超时参数 socket选项SO_RCVTI

Linux 高性能服务器编程——高级I/O函数

重定向dup和dup2函数 [cpp] view plaincopyprint? #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor_one, int file_descriptor_two); dup创建一个新的文件描述符, 此描述符和原有的file_descriptor指向相同的文件.管道或者网络连接. dup返回的文件描述符总是取系统当前可用的最小整数值. dup2函数通过使用参数f

根据《linux兵书》目录 在kali上操作 第8章 Linux下的编程

第8章  浑水摸鱼:Linux下的编程 175 8.1  Linux下常用的开发工具 176 8.1.1  GCC 176 8.1.2  CVS 176 8.1.3  Perl 176 8.1.4  Linux上的Delphi--Kylix 177 8.2  Linux下的Vi文本编辑器 177 8.2.1  Vi编辑器介绍 178 8.2.2  启动Vi编辑器 179 8.2.3  显示Vi中的行号 180 8.2.4  光标移动操作 181 8.2.5  屏幕命令 182 8.2.6  文本