本案例要求熟悉Linux Shell环境的特点,主要练习以下操作:
实现此案例需要按照如下步骤进行。
步骤一:切换用户的Shell环境
什么是shell?
Shell是在Linux内核与用户之间的解释器程序,通常指的是bash,负责向内核翻译及传达用户/程序指令,如图-1所示。
图-1
shell的使用方式:
1.交互执行指令:人工干预,执行效率底。
2.非交互执行指令:安静地在后台执行,执行效率高,方便写脚本。
若需要临时使用另一种Shell环境,可以直接执行对应的Shell解释器程序,比如只要执行ksh可以切换到ksh命令行环境。
若希望修改用户的登录Shell,管理员可以直接通过usermod(或useradd)命令设置。比如,以下操作可将用户zhangsan的登录Shell改为/bin/ksh:
步骤二:快捷键与Tab键补齐,常见快捷键如表-1所示
表-1
步骤三:练习命令历史
1)检查历史命令的容量。
默认记录1000条,通过全局变量HISTSIZE设置,对所有用户有效:
查看已为当前用户记录的历史命令条数:
2)查看历史命令列表。
列出最近执行的10条历史命令:
3)调用指定的历史命令。
重新执行历史命令列表中的第1028条操作:
重新执行最近一次以cat开头(根据实际情况变更)的历史命令操作:
步骤四:练习命令别名
1)查看已经定义的命令别名列表。
当前的别名列表:
步骤四:重定向标准输入/输出/错误输出
1)重定向标准输出。
使用 > 将命令执行的正常输出重定向到文件:
> 操作会覆盖目标文件(先清空、再写入):
改用 >> 可实现追加重定向输出:
2)重定向标准错误。
对于命令执行出错的信息,使用 > 无法保存,仍然会输出到屏幕。比如,可使用ls命令同时查看两个对象(其中nb.txt并不存在),重定向输出:
使用 2> 可重定向错误信息,比如,可执行一个错误的命令:
类似的,2>> 可实现追加输出:
若希望将正常输出、错误输出重定向同一个文件,可使用 &> :
3)重定向标准输入。
4)案例
步骤五:管道操作实践
借助于管道符“|”,可以将一条命令的标准输出交给另一条命令处理,在一条命令行内可依次使用多个管道。
1)统计/etc/目录下资料的数量。
2)列出Yum库里名称中含cluster的软件包。
本案例要求编写三个脚本程序,分别实现以下目标:
一个规范的Shell脚本构成包括:
实现此案例需要按照如下步骤进行。
步骤一:编写第一个Shell脚本,输出“Hello World”
1)根据手动任务操作编写脚本文件
2)执行脚本,测试效果
3)Shell脚本的执行方式:
方法一,作为“命令字”:指定脚本文件的路径,前提是有 x 权限
方法二,作为“参数”:使用bash、sh、source来加载脚本文件
步骤二:编写为本机快速配Yum仓库的Shell脚本
1)Yum仓库配置文件的参考内容如下:
2)根据参考文件的内容,编写脚本内容如下:
3)执行脚本,测试效果
执行配置Yum仓库的脚本:
检查配置结果:
步骤三:编写快速装配vsftpd服务的Shell脚本
1)编写参考脚本文件如下:
3)执行脚本,测试效果
执行快速装配vsftpd服务的脚本:
确认脚本执行结果:
本案例要求熟悉Shell变量的使用,主要练习或验证下列内容:
除了学会建立和引用变量以外,还要认识环境变量PWD、USER、HOME、SHELL,还有预定义变量$0、$$、$?、$#、$*,以及位置变量$1、$2、$10、……的作用。
实现此案例需要按照如下步骤进行。
步骤一:变量的定义/赋值/查看
1)新建/赋值变量
新建变量test,赋值“hello world”,通过set命令可以检查变量设置:
2)查看变量
通过echo $变量名 可输出变量值:
查看变量时,若变量名称与后面要输出的字符串连在一起,则应该以{}将变量名括起来以便区分:
3)撤销自定义变量
若要撤销已有的变量,可使用unset命令:
步骤二:使用环境变量
1)查看环境变量相关文件
全局文件为/etc/profile,对所有用户有效;用户文件为~/.bash_profile,仅对指定的用户有效。
查看/etc/profile文件内容:
2)使用环境变量
当前用户的环境变量USER记录了用户名、HOME记录了宿主目录、SHELL记录了登录Shell、HOSTNAME记录主机名、UID是用户的id号:
环境变量PS1表示Shell环境的一级提示符,即命令行提示符(\u 用户名、\h 主机名、\W 工作目录、\$ 权限标识):
环境变量PS2表示二级提示符,出现在强制换行、at任务编辑等场合:
3)查看系统变量
使用env可查看所有环境变量:
使用set可查看所有变量(包括env能看到的环境变量):
步骤三:使用位置变量与预定义变量
1)创建一个测试脚本,用来展示。
2)执行脚本location.sh,细心观察结果(高明的武功需要用心参悟)。
步骤四:创建账户与修改密码的脚本
1)编写脚本。
执行脚本测试:
本案例要求进一步熟悉Shell变量的赋值控制,主要练习或验证下列内容:
实现此案例需要按照如下步骤进行。
步骤一:三种引号对变量赋值的影响
1)双引号的应用
使用双引号可以界定一个完整字符串。
2)单引号的应用
界定一个完整的字符串,并且可以实现屏蔽特殊符号的功能。
3)反撇号或$()的应用
使用反撇号或$()时,可以将命令执行的标准输出作为字符串存储,因此称为命令替换。
步骤二:使用read命令从键盘读取变量值
1)read基本用法
执行后从会等待并接受用户输入(无任何提示的情况),并赋值给变量str:
为了不至于使用户不知所措、莫名其妙,推荐的做法是结合-p选项给出友好提示:
2)stty终端显示控制
将回显功能关闭(stty -echo),
将回显功能恢复(stty echo)。
可参考下列操作创建一个测试脚本:
执行测试脚本user.sh,验证效果:
步骤三:使用export发布全局变量
默认情况下,自定义的变量为局部变量,只在当前Shell环境中有效,而在子Shell环境中无法直接使用。比如已定义的SCHOOL变量,当进入到sh或bash子Shell后,变量SCHOOL将处于未定义的状态:
若希望定义的变量能被子进程使用,可以使用export命令将其发布为全局变量。使用export发布时,只需指定变量名(可以有多个)即可,也可以通过export命令直接设置新的全局变量:
验证刚刚发布的全局变量:
本案例要求熟悉Linux Shell环境的特点,主要练习以下操作:
实现此案例需要按照如下步骤进行。
步骤一:整数运算工具
1)使用expr命令
乘法操作应采用 \* 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号。
首先定义变量X=1234,然后分别计算与78的加减乘除和求模运算结果:
2)使用$[]或$(())表达式
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。
同样对于变量X=1234,分别计算与78的加减乘除和求模运算结果:
3)使用let命令
expr或$[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:
步骤二:小数运算工具
1)bc交互式运算
先执行bc命令进入交互环境,然后再输入需要计算的表达式。以计算小数12.34与5.678的四则运算为例,相关操作如下:
2)bc非交互式运算
将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制,除此以外也受参与运算的数值的小数位影响。以计算小数12.34与5.678的四则运算为例,相关操作如下: