1.shell变量基本用法及常用符号使用
(1)将主提示符改为用户的主目录名
(2)将字符串 DOS file c:>\$student\*赋值给变量 x,并显示出来
(提示:注意引号的选择,同时确保字符串中多个空格、$、*等完全原样显示)
(3)在 shell 命令终端输入likes=(cosmos galaxy moon); likes=mars,然后使用 echo 分别显示以下表达式的值
第一行定义一个一维数组likes,里面有三个元素cosmos,galaxy,moon
第二行将数组likes的第一个元素变成mars
${likes[*]}:显示数组like中所有非空元素
${likes[@]}:显示数组like中所有非空元素
${#likes[*]}:显示数组like中元素个数
${#likes[@]}:显示数组like中元素个数
${#likes}:显示数组like中下表为0的元素的长度
${#likes[0]}:显示数组like中下表为0的元素的长度
(4)在 shell 命令终端输入 name=Phoenix,然后使用 echo 显示表达式①,观察结果;然后输入命令 unset name,再输入表达式①观察结果。
变量name的值为Phonenix,不为空,所以echo显示的为Phonenix
Unset用于删除已定义的变量,删除后name为空,所以echo显示的为hello
(5)在 shell 命令终端输入 name='/usr/share/doc/apg/php.tar.gz',然后使用 echo 分别显示表达式①和②的值,观察结果。
%或%%后面的内容与name的值的末尾匹配,name的值去掉匹配到的结果就是表达式的值
%是最少匹配,%%表示最多匹配
修改 name 的值,让 name='/etc/apt/sources.list.d',再次使用 echo 分别显示表达式①和②的值,观察结果。
同上
(6)在 shell 命令终端输入 name=/usr/bin/X11,然后使用 echo 分别显示表达式①和②的值,观察结果。修改 name 的值,让 name='/etc/apt/sources.list.d',再次使用 echo 分别显示表达式①和②的值,观察结果。
#或##后面的内容与name的值的开头匹配,name的值去掉匹配到的结果就是表达式的值
#是最少匹配,##表示最多匹配
(7)已知某同学提交的博客文章页面地址 address 如下:address='http://www.cnblogs.com/xyz/p/8569001.html'通过字符串匹配,如何得到其博客主页地址:homepage='http://www.cnblogs.com/xyz' 写出由变量 address 得到变量 homepage 的 shell 命令实现。
2. shell 脚本分析
(1)使用 vim/gedit 编写 shell 脚本文件 ex1.sh,其内容如下:(教材 P145 思考题 4.8)
在 shell 命令终端分 3 次运行该脚本,观察其运行结果。
执行. ex1.sh时,没带参数,不符合while中的条件,所以什么都不执行不输出
执行. ex1.sh best wishes时,有两个参数,$count=2,满足while中的条件,$count大于等于0,cmd的值为wishes,count-1,依旧满足条件,cmd的值为wishes best,count-1不满足条件,退出运行cmd中的命令
执行. ex1.sh god bless u,原理同上
整个脚本作用是倒序输出参数。
(2)使用 vim/gedit 编写 shell 脚本文件 ex2.sh,其内容如下:(教材 P145 4.10)
在命令终端输入. ex2.sh jsj,(实际执行时,请将 jsj 替换为您电脑中的登录用户名)
第六行判断用户名hadoop是否在系统中
八到十行将第一个参数重定向到LimitString中,向其发送Hello hadoop
(3)使用 vim/gedit 编写 shell 脚本文件 ex3.sh,其内容如下:
在命令终端输入. ex3.sh
该脚本功能是将当前文件夹下所有.sh格式文件复制一遍,新文件名在原文件名基础上加上后缀”.BACKUP--当前时间”
(4)使用 vim/gedit 编写 shell 脚本文件 ex4.sh,其内容如下:
在 shell 命令终端分 3 次运行该脚本,观察其运行结果。
执行. ex4.sh时,参数为空,所以脚本在等待参数输入,输入后加上行号一起输出
执行. ex4.sh /etc/apt/sources.list时,将/etc/apt/sources.list中的内容作为参数连行号一起输出
执行. ex4.sh /etc/apt/sources.list ex4.sh时,先后将/etc/apt/sources.list和ex4.sh中的内容作为参数连行号一起输出
3. shell 脚本编写
1.编写一个shell脚本,它把第二个位置参数以及其后的各个参数指定的文件复制到第一个位置参数指定的目录中。
2.打印给定目录下的某些文件,由第一个参数指出文件所在的目录,其余参数是要打印的文件名。
3.利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。
4.设计一个程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:
$cuts 11 14
this is a test of cuts program (输入)
test (结果)
(5)猜数字游戏
具体要求如下:
① 写一个函数 random0_100 生成 0~100 之间的随机数
② 用户从键盘输入竞猜数字,如果猜错了,提示用户所猜数字偏大或偏小,用户继续猜,直至猜对为止。
4.总结与体会
本次实验,我觉得自己shell编程能力不够,做练习时需要借助课本和资料,因此,还需要进一步练习和理解。