Linux(七)编写shell管理脚本
原创
©著作权归作者所有:来自51CTO博客作者依然2011的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.Shell的作用及常见种类
Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,负责接收用户输入的操作指令并进行解释,将需要执行的命令交给内核执行。
常见种类有Bsh、Csh、Ksh、Bash、Zsh
2.shell环境的切换
查看当前Linux系统中能够使用的shell程序的列表
确认shell程序中存在的部分链接文件(tcsh是csh的兼容升级版本)
切换至tcsh程序的shell环境,并验证是否还能使用help内部指令和外部命令ls
更改用户自己登录的shell
由管理员更改其他用户的登录shell(使用usermod –s命令)
3.Bash的常用功能
命令历史是bash中用于提高命令输入效率的一项功能,能够让用户快速地重复执行已经输入过的命令,减少重复输入工作
使用!wh调用历史命令中最近一次以wh开头的命令并执行
查看用户最后执行的三条历史命令记录
通过“!序号”的形式执行用户历史命令列表中第15条命令
将所有用户记录历史命令的条数设置为200(执行vi /etc/profile命令)
将用户zhangsan的历史命令记录的条数设置为5,重新选择后确认效果
清楚历史命令
命令别名
查看已设置的所有命令别名
使用预设的别名“ll”实现ls –l命令的功能
设置命令别名dir,以便执行ls –ld –coloy=tty的命令,并进行确认
取消已设置的dir命令别名(unalias –a取消用户当前环境下已设置的所有命令别名)
标准输入输出重定向
标准输入默认的设备是键盘,文件编号为0,
标准输出默认的设备是显示器,文件编号为1
标准错误默认的设备是显示器,文件编号为2,
变更输出内容的方向,叫做“重定向”
查看zhangsan用户的身份信息,并将输出结果保存到文件idzs.txt中
“>”重定向符后面的指定文件如果不存在,则会建立新文件,并将命令结果保存到该文件中,它将会覆盖文件原有内容
“>>”重定向符可以将命令执行的结果追加到文件的末尾进行保存,而并不覆盖文件原有内容
查看用户lrn的身份信息,并追加到文件idzs.txt中,不覆盖文件原有内容
标准输入重定向“<”若结合—stdin命令选项则可以从文件中读取并自动设置密码,省略了交互式的过程
尝试使用help命令查看ls命令的帮助信息,由于ls并非内部命令,系统将会报错,通过2>操作符可以将报错信息重定向到指定的文件
使用“2>”操作符一样会覆盖文件中的内容,若要追加到新的内容到同一个文件,需要使用“2>>”重定向操作符
使用ls命令查看/etc/passwd文件和/etc/shadow文件属性时,输出结果将同时包含标准输出和错误输出,测试进行分别重定向、合并重定向的结果(一个是在不同的文件,另一个是在同一个文件,关键是是否使用“&”
过滤出/etc/inittab文件中不以“#”号开头的行,并再次过滤出非空行,将结果重定向保存为inittab.txt文件中
找出系统中使用bash作为登陆shell,名称以ha开头的用户账号,并只显示出用户名。登陆shell两个字段的内容
查看当前系统的总内存空间,剩余可用内存空间(MB),去除其他无关的信息
4.shell变量应用
常见shell变量的类型用户包括用户自定义变量,环境变量,预定义变量,位置变量
新建一个名为“DAY”的变量,初始内容设置为“Sunday”
查看和引用变量的值
通过在变量名称前添加前导符号“$”可以引用一个变量内容。若需要在终端输出变量的内容,可以使用echo命令,它可以同时也用于显示用户指定的其它字符串内容
在变量DAY的内容后紧跟“MorningBus”字符串并一起显示
为变量赋值的常用方法
确认变量DAY的内容,并使用双引号TODAY变量赋值“Today is $DAY”
使用单引号时,将不允许在单引号的范围内引用其他变量值$字符将被看成普通字符看待
确认变量DAY的内容,并使用单引号为TODAY变量赋值`Today is $day`
使用反撇号时,允许将执行特定命令的输出结果赋给变量,反撇号内包含的字串必须是能够执行的命令,执行后会用输出结果替换该命令字串
统计当前登录到本地终端中的用户数量,并将结果保存到变量UserNum中
用一行命令找出安装了fdisk程序的软件包名称(需要先确定fdisk程序的文件位置)
通过find命令找出系统中lrn用户留下的文件或目录,并使用rm命令将其删除
在使用嵌套使用命令替换操作时,反撇号将力所不能及,这时可以将反撇号用$()来代替
下面使用一行命令,将上一个例子的输出结果保存到变量FdiskPKG中
除了上述赋值操作以外,还可以使用Bash的内置命令read来给变量赋值
从键盘输入一整行数据,赋值给变量hello,并确认hello变量的内容
从键盘输入一整行数据,依次赋值给变量G1 G2,并确认其内容
从键盘输入一整行数据,并给出相应的提示信息
设置变量的作用范围
对于用户自定义变量,默认情况下只能在当前的shell环境下使用,因此称为“局部变量”,局部变量在新开启的子shell环境中时无效的
在当前shell环境中定义一个变量FILESVR,开启一个新的子shell进程,处于子shell环境时将无法使用变量中的内容
为了使用户定义的变量在所有的子shell环境中能够继续使用,减少重复设置工作,可以使用export命令将制定的变量设置为“全局变量”
确认变量FILESVR的内容,并将其设置为全局变量,在子shell,当前shell中验证
Export命令还可以在输出变量的同时对指定名称的变量进行赋值(创建),这样在使用export命令之前就不需要单独为变量进行赋值
定义两个变量MONTH YEAR,并将其设置为全局变量
清除自定义变量,可以用unset命令对已定义的用户变量进行
清除,指定一个或多个变量名称作为参数即可
数值变量的运算
计算变量X的值与数值123的和,并将计算结果重新赋值给变量X
5.环境变量
环境变量是指用户登录后linux系统预先设定好的一类shell变量,其功能是设置用户的shell工作环境,包括用户宿主目录,命令查找路径、用户当前目录、登录终端等
以分号分隔,显示当前的用户名、宿主目录、登录shell
确认当前搜索路径,并将/opt/bin目录添加到现有的搜索路径中去
在当前用户环境中,将用于限制历史命令的条数的环境变量HISTSIZE的值改为24
编辑~、。Bash_profile文件,修改PATH的设置,以便用户在下次的登录后能够使用/opt/bin目录作为默认搜索路径
位置变量
预定义变量,用户只能使用预定义变量,而不能创建新的预定义变量
$#表示命令行中位置参数的数量
$*表示所有位置参数的内容
$?表示命令执行后返回的状态0表示命令正确
$$表示当前进程的进程号
$!表示后台运行的最后一个进程的进程号
$0表示当前执行的进程的进程名
编写并执行shell脚本
包括运行环境设置,注释行,可执行语句
使用一个vi编辑器编写一个简单的shell脚本文件reboot.sh,用于报告当前系统中/boot目录中所占用的空间大小,并列出其中内核文件的属性信息
为脚本文件添加可执行权限
执行shell脚本
直接执行带x权限的脚本文件
使用shell解释器执行脚本
使用bash解释器手动加载执行reboot.sh脚本文件中的语句
使用.命令执行脚本
Shell脚本应用实例
脚本案例一
由于公司的文件服务器空间有限,需要完成定期任务,即在每周五下班前(17:30)检查公共共享目录/var/ftp/pub中的内容,将其中所有子目录及文件的详细列表和当时的时间信息追加保存到/var/log/pubdir.log日志文件中,然后清空该目录中的内容
编写脚本文件ftpclean.sh,并添加执行权限
设置计划任务并确认crond服务已经启动(执行crontab –e命令)
上一篇:Linux系统管理(六)
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章