zoukankan      html  css  js  c++  java
  • SHELL编程综合练习

    SHELL编程综合练习1

    一、 实验准备(预防抄袭,此步必做)

    1. 请将命令提示符设为你的学号:输入PS1=你的学号_,即学号之后跟下划线,例如PS1=110015_, 回车执行
    2. 如发现命令提示符和你的学号不匹配,实验报告视为抄袭或无效,呵呵

       

    二、 实验项目

    (一)第一个shell程序

        Shell程序是一个文本文件,操作系统不能把一个文本文件装入内存并且执行,所以只能启动一个解释器,来逐条解释执行,这个解释器就是Shell,shell程序的第一行必须指明这个解释器。

    执行命令 echo $SHELL

    可以看到我们使用的shell: /bin/bash

    现在假如我们需要一个脚本,检查某个用户名是否合法用户,这个脚本命名为check_in:

    执行命令

    touch check_in

    建立一个空白文件,然后双击打开,写入如下代码

    #!/bin/bash

    if grep "^$1:" /etc/passwd >/dev/null 2>/dev/null

    then

        echo "$1 is a valid login name"

    else

        echo "$1 does not exist."

    fi

    exit 0

    存盘退出,执行命令

    chmod +x check_in

    然后执行命令

    ./check_in sdyu, 执行结果(此处插入截图)

    再执行

    ./check_in xyzw, 执行结果:(此处插入截图)

    (二)linux登录模拟

        执行命令touch log_in,建立空白文件log_in

    双击log_in打开,键入如下代码:

    #!/bin/bash

    name="sdyu"

    pass="123456"

    echo -n "enter the name:"

    read myname

    echo –n "enter your password:"

    stty –echo

    read mypass

    stty echo

    echo –e " "

    if [ "$myname" != "$name" ] || [ "$mypass" != "$pass" ]

    echo "the name or the password is not right"

    else

    echo "you can log in"

    fi

    执行命令chmod +x log_in,

    键入./log_in, 执行

    进行输入测试:(此处插入截图,测试的时候输入正确和错误数据分别测试)

    (三)教程220页,rwx.sh

    执行命令touch rwx.sh, 然后双击打开,键入例题中的命令,再次

    chmod +x rwx.sh,

    键入./rwx.sh 执行:插入截图)

    (四)教程225页,score01.sh,

    执行命令touch score01.sh, 然后双击打开,键入例题中的命令,再次

    chmod +x score01.sh,

    键入./ score01.sh 执行:插入截图)

     

     

     

     

     

     

     

     

    SHELL编程综合练习3

    一、 实验准备(预防抄袭,此步必做)

    1. 请将提示符设为:学号加波浪号。输入PS1=学号~,如PS1=110015~, 回车执行
    2. 如发现提示符、学号不匹配, 视为抄袭或无效

    二、 实验项目

    1、 stty:输入回应的关闭和打开

    执行命令:

    stty –echo

    关闭键盘输入回显,然后依次执行命令

    who

    ls

    有什么效果?

    请解释为什么输入的命令没有显示,命令结果却能显示?

    (此处作答):命令结果并不是从键盘输入到显示屏上的,命令stty –echo关闭键盘输入回显,但没有关闭从其他文件输出到显示屏。

    再使用命令

    stty echo

    恢复键盘输入回显

    $ 关于stty命令的使用,请参考 man stty

    2、 echoprintf:输出信息和变量的内容

    依次执行下列命令:

    name=" Harry Potter"

    echo "Mr. $name welcome to Hogwarts School of Witchcraft "

    printf "Mr. %s welcome to Hogwarts School of Witchcraft " $name

    下面粘贴命令执行截图Ê

    默认情况下,echo自动换行,printf不会自动换行

    可以用echo -n 抑制自动换行,printf 可以用 输出一个新行

    echo和printf功能差不多,可以根据个人喜好选择使用

    3、测试和判断

        程序中离不开分支和循环单元,shell script中做分支判断有这样几种方法:

    • 执行一条命令,并测试命令的返回值: $? ,如果为0,命令执行成功,否则不成功
    • test命令
    • if、case、select等语法结构

    第一种同学们已经熟悉了

    4、test命令

    test命令的格式:

            test 条件

    如果条件成立,test命令的返回值$? 为0, 否则非0

    假如脚本中需要测试某个文件或者目录是否存在,可以使用

    test -e file

    来测试,如果文件存在,$?为0,否则非零

    例如:

    依次执行下列命令,并观察结果:

    test -e xyzw

    echo $?

    touch xyzw

    test –e xyzw

    echo $?

    下面粘贴命令执行截图Ê

    书写test命令的时候,也可以简写,省略test关键词,简化书写方式,改为下面的写法,请依次执行下列命令:

    [ -e wwwxxx ]

    echo $?

    touch wwwxxx

    [ -e wwwxxx ]

    echo $?

    下面粘贴命令执行截图Ê

    $ 注意:方括号右侧和左侧应有空格

    test的更多用法见教材219页

    5、字符串测试

    程序中永远少不了的是字符串运算,例如,测试两个字符串是否相等

    依次执行下列命令

    ip1="192.168.0.1"

    ip2="192.168.0.2"

    [ "$ip1" = "$ip2"] 注意等号前后的空格

    echo $?

    下面粘贴命令执行截图Ê

    $? 不为0,说明字符串不相等

    关于字符串测试,见教程221页,请同学们自己多做练习

    6、整数比较

    整数比较的语法,见教材222页

    -lt:        less than的缩写,不是数字1

    -ge:     greater or equal 的缩写

    同样注意运算符前后的空格

    7、 if判断语句

    if语句的语法结构,从if开始,到fi结束,fi是if颠倒过来写。

    if语法有两种写法:

    第一种写法:

    if command

    then

         ……

    fi

    第二种写法

    if command;then

         ……

    fi

    第一种写法,command后面没有分号;then必须移到下一行

    第二种写法,command后面有分号;then就可以写在同一行

    注意当if后面的command执行成功的话,也就是$? 为0,才会执行then后面的命令,否则不会执行。

    下面我们做个实验:

    删除一个文件之前,可以检查它是不是一个空文件,尤其在备份的时候,空文件可以放心删除,非空文件则需要慎重

    test –s file:当文件file非空时返回0

    依次执行下列命令

    touch test31.sh

    touch xyzw

    双击打开test31.sh,键入如下命令

    #!/bin/bash

    filename="xyzw"

    if [ -s $filename ]

    then

    echo "the file $filename is not empty"

    echo "and will not be deleted"

    else

    echo "the file $filename is empty"

    echo "Deleting now......"

    rm $filename

    fi

    存盘退出,执行命令

            chmod +x test31.sh

    然后执行 ./test31.sh

    下面粘贴命令执行截图Ê

    执行命令ls,文件xyzw是否已经被删除?

    现在再依次执行命令

    touch xyzw

    dd if=/dev/zero of=xyzw bs=1M count=1

    上面第二条命令使得空文件xyzw变成一个大小为1M的文件,注意M要大写。

    执行命令

    ls -l

    可以验证文件xyzw的大小

    现在再次执行上面的脚本

    ./test31.sh

    下面粘贴命令执行截图Ê

    8、 chmod:改变文件权限

        chmod的意思是change mode,具体用法查阅man chmod

    执行命令

    touch anyfile

    ls –l

    下面粘贴命令执行截图Ê

    可以看到文件anyfile缺少执行许可

    再执行命令

    chmod +x anyfile

    ls -l

    下面粘贴命令执行截图Ê

    可以看到文件已经有了执行许可

    执行 ./anyfile

    没有任何输出,因为这是个空文件

    9、read:接受用户输入

    read 的用法是

    read 变量名

    将用户输入保存在变量中。

    可以用 –p 选项加提示语:

    read -p "prompt message " 变量名

    read命令会等待用户输入到地老天荒,所以使用的时候,最好用 –t选项加一个计时器。

    下面是一个实验:

    touch test32.sh

    双击test32.sh打开,输入:

    #!/bin/bash

    if read -t 5 -p "Please enter your name" name

    then

    echo "Hello $name"

    else

    echo "sorry, time out, game over"

    fi

    存盘退出,执行

    chmod +x test32.sh

    然后执行这个脚本:

    ./test32.sh

    下面粘贴命令执行截图Ê

    如果5秒之内不输入信息,read返回值$? 不为0,即输入没有成功

    $注意 read以行为单位读取,碰到回车之后返回,但回车符号不计入输入之内。

    昔日我曾苍老,如今风华正茂(ง •̀_•́)ง
  • 相关阅读:
    codeforces431C
    codeforces158C
    codeforces570C
    codeforces472C
    codeforces401C
    codeforces630C
    codeforces581C
    校内题目腐草为萤
    校内题目大美江湖
    洛谷P3370 && 字符串哈希讲解
  • 原文地址:https://www.cnblogs.com/lgqrlchinese/p/10035336.html
Copyright © 2011-2022 走看看