实验四 Shell 编程(2)

实验四

  1. shell变量基本用法及常用符号使用
    (1)将主提示符改为用户的主目录名,如图1(1):
    1351329-20180602213154881-122442387.png

    图1(1)

(2)将字符串DOS file c:>$student*赋值给变量x,并显示出来,如图1(2):
1351329-20180602213335703-654328684.png

  图1(2)

(3)表达式作用:(表达式和输出结果见图1(3)):
1351329-20180602213400349-873310520.png

  图 1(3)
 作用分析:
     ${likes[*]}和${likes[@]} 表示数组likes中所有非空元素的值,以逗号隔开显示;
     ${#likes[*]}和${#likes[@]} 表示数组likes中已经设置的元素的个数;
     ${#likes}和${#likes[0]} 表示数组下标为0的元素值;
    /*此时,likes等价于likes[0]*/

(4)${name:-hello} 以及 unset name :(结果见 图1(4))
1351329-20180602213438847-386836261.png

  图1(4)
    作用分析:
     ${name:-hello}:表示原先name的值,若name为空,则把hello 赋值给name。
     unset name: 取消name的定义,执行后,name为空。

(5)${name%%.} 和 ${name%.} (结果如 图1(5)):
1351329-20180602213500582-17236847.png

  图 1(5)
   作用分析:
       ${name%%.*}:对name从末尾开始与符号.进行匹配,删除最多匹配的部分。
       ${name%.*}:对name从末尾开始与符号.进行匹配,删除最少匹配的部分。

(6)${name#/} 和 ${name#/} (结果如 图1(6))
1351329-20180602213528875-205722865.png

   图1(6)
    作用分析:
        ${name#*/}:对 name 从首位开始与符号/进行匹配,删除最少匹配的部分。
        ${name##*/}:对 name 从首位开始与符号/进行匹配,删除最多匹配的部分。

(7)从 address 中获取 homepage ,如下图1(7)所示:
1351329-20180602213545986-1592765420.png

   图1(7)

2.shell脚本分析
(1)有ex1.sh脚本文件如图2(1)_1:
1351329-20180602215728298-2037599634.png

   图 2(1)_1

   运行结果如图2(1)_2:

1351329-20180602220132934-840559323.png

   图2(1)_2

小结:
1)整个 shell 脚本的功能是:将所有输入的参数逆序输出
2)功能描述:Line 8:在内容上,对 cmd 的参数值进行$count的追加操作,count表示参数个数
Line 9:实现count的自减运算
Line 11:执行cmd中的指令
3)while的循环情况:
. ex2.sh:循环0次(不执行)
. ex2.sh best wishes:循环2次
. ex2.sh god bless u:循环3次
4)运行. ex1.sh god bless u时,while循环体第1次被执行时,第8行执行后变量cmd的值为echo $3

(2)有ex2.sh脚本文件如图2(2)_1:
1351329-20180602213711748-1066003375.png

   图2(2)_1

   运行结果如图2(2)_2:

1351329-20180602214821967-1909046430.png

   图2(2)_2

小结:
1)Line 6中,who|grep “^$1” 表示对输入的参数进行用户匹配,看是否存在
2)Line 8~10 的功能:将第一个参数xjx重定向到Limitstring中,再发送hello xjx

  (3)有ex3.sh如图2(3)_1:

1351329-20180602214844483-1921176537.png

   图2(3)_1

运行结果如图2(3)_2:
1351329-20180602213822159-1597038513.png

   图2(3)_2
   该脚本的功能: 复制当前目录所有.sh 的文件并追加BACKUP--日期--时间。

(4)有ex4.sh脚本文件如图 2(4)_1:
1351329-20180602213857341-1275279485.png

  图 2(4)_1

运行结果如下:
1351329-20180602213911923-478681450.png

图 2(4)_2
1351329-20180602213919363-1956173599.png

图2(4)_3
1351329-20180602213929025-636854098.png

图2(4)_4
...
/**/
1351329-20180602213939953-62258276.png

图2(4)_5
小结:
1)Line 4-10的功能为:保存并显示输入串,行号在前字符串在后。
2)Line 14中,条件测试满足的情况下,脚本执行的功能为:执行NL。
3)Line 17-21的功能为:向NL传参,由NL 调用后销毁,参数左移一位。

3.Shell脚本编写
(1)编写一个shell脚本,它把第二个位置参数以及其后的各个参数指定的文件复制到第一个位置参数指定的目录中。
脚本文件test1.sh 见图3(1)_1:
1351329-20180602213954049-154917524.png

        图3(1)_1

运行结果见图3(1)_2:
1351329-20180602214042420-452201752.png

       图3(1)_2

(2)打印给定目录下的某些文件,由第一个参数指出文件所在的目录,其余参数是要打印的文件名。
脚本文件test2.sh如图 3(2)_1:
1351329-20180602214112859-454945978.png

       图 3(2)_1

运行结果如图3(2)_2:
1351329-20180602214130041-1972941977.png

       图3(2)_2

(3)利用for循环将当前目录下的 .c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。
脚本文件test3.sh见上题(2)中图3(2)_2所示。
结果如图3(3):
1351329-20180602214148120-569097153.png

  图 3(3)

(4)设计一个程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:
$cuts 11 14
this is a test of cuts program (输入)
test (结果)
脚本文件test4.sh如图3(4)_1:
1351329-20180602214212502-2072757777.png

  图3(4)_1
 结果如图3(4)_2:

1351329-20180602214908752-335945743.png

  图3(4)_2

(5)猜数字游戏
具体要求如下:
①写一个函数random0_100生成0~100之间的随机数
②用户从键盘输入竞猜数字,如果猜错了,提示用户所猜数字偏大或偏小,用户继续猜,直至猜对为止。
(提示:shell内部系统变量RANDOM生成0~32767之间的整数随机数)
脚本文件test5.sh如图3(5)_1:
1351329-20180602214244669-1501753891.png

图3(5)_1

结果如图3(5)_2:
1351329-20180602214305631-502328955.png

图3(5)_2

转载于:https://www.cnblogs.com/xiajinxin-043/p/9127003.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值