免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1170 | 回复: 0
打印 上一主题 下一主题

增强型RHCE学习笔记 (6) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-29 22:07 |只看该作者 |倒序浏览

                Unit 6 Using the bash shellKeyword: bash, script
    关于bash,在RHCE的官方和非官方教材中提及得很少,个人认为如果一个系统管理员不会写系统的脚本是不可想象的。套用ABS Guide CN的译者的序言“毫无疑问,UNIX/Linux最重要的软件之一就是shell,目前最流行的shell被称为Bash(Bourne Again Shell),几乎所有的Linux和绝大部分的UNIX都可以使用bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX工作平台上最亲密的朋友,因此,学好shell,是学习Linux/UNIX的的开始,并且它会始终伴随你的工作学习。”
    想要学好bash的朋友可以参阅上面的ABS Guide CN(Advanced Bash-Scripting Guide>中文译本),在下的几下功夫就是来自半本ABS Guide CN(还没看完哪)。但既然bash是如此之重要,我会稍花篇幅来让各位读者快速入门一下。
6.1 Shortcut 快捷键    稍微介绍一下这个gnome-terminal,因为RHEL默认使用gnome,所以在GUI默认就是用这个shell。登陆后打开Application->Accesstories->Terminal,这个就是gnome-terminal啦。先说几个快捷键:
Ctrl+a 光标回到行首,相当于Home
Ctrl+e 光标回到行尾,相当于End
Ctrl+u 删除从光标到行首的部分
Ctrl+k 删除从光标到行尾的部分
Ctrl+方向键 以单词为单位移动(此功能在tty下面不生效,只在gnome-terminal下面生效。其实我挺喜欢这个功能,为啥在console就不能用呢?)
Shift+PgUp 向上翻屏
Shift+PgDn 向下翻屏
Ctrl+i 清屏
6.2 wild card expansion 通配符* 可以代表零个或若干个字符
? 代表一个字符
[0-9] 代表0到9之间的任何一个数字,变通的方式还有[4-8]等,代表4至8之间的数字
[abc] 代表任何一个在方括号内的字符
[^abc] 代表任何一个不在方括号内的字符
提醒一下,通配符和数组、枚举等数据类型不同,前者是bash的一种简单表达方式,后者是数据结构。
6.3 variables and aliases 变量及别名Tilde(~)
这个“~”中文叫什么符号呢?噢,流水线符!反正他的作用就是代表home的目录,如
$echo ~
/home/student
$ls ~
/Desktop (显示了我的home目录里面的文件)
变量赋值
$HI=”Hello, and welcome.” (声明变量HI)
$echo $HI (显示变量HI,第一个$是系统的提示符,在使用变量HI的时候要加一个$)
Hello, and welcome.
$HI=”Hello, and welcome to $(hostname). (hostname是一个命令,这种$()的方式可以在其赋值之前先执行hostname,然后才一起将结果赋值给$HI,利用这种方式可以简写一些脚本而且可以进行比较复杂的操作)
$echo $HI
Hello, and welcome to stationX.
别名
别名的作用可以将一些常用的比较长的字符串用别名代替,如
$alias rm=rm –i (以后使用rm的时候每个文件都会有删除的确认)
转义符(\)(')
为了防止$ ! ?等特殊符号发生作用,就要使用转义符
$HI=”Hi means something else”
$echo $HI ($HI已经赋值,常规只能显示值)
Hi means something else
$ echo \$HI (要显示“$HI”字符就需要转义符)
$HI
$echo *** WARNING *** (如果我想显示“*** WARNING ***”会发觉有问题,这是因为*在发挥作用)
Desktop WARNING Desktop
$echo ‘*** WARNING ***’ (除非用单引号把它们括起来)
*** WARNING ***
一些有用的变量
$*
表示当前脚本的所有参数
$#
表示当前脚本的所有参数的个数
$?
表示最后一个程序的return值
$PS1
当前的提示符
6.4 Creating shell scrptis创建脚本用文本编辑器创建一个文本info.sh如下:
#!/bin/bash (这行的#并非注释的意思。它们代表这个脚本用bash解释)
# this scrpit display some information about your environment (这行的#表示注释,后面的东西都不用执行)
echo “ Greetings. The date and time are $(date)”
echo “Your working directory is: $PWD”
保存后跟着执行
$chmod u+x info.sh (允许info.sh有执行的权限)
再执行
$./info (请注意不是info.sh,前面还有“./”)
Greetings. The date and time are Tue Jan 5 04:34:36 CST 2010
Your working directory is: /home/student
(“.”代表当前目录,./info即/home/student/info。以往无需“./”的命令一般都是PATH指定的目录里面的命令或者是别名)
6.5 简单的if then以目前的知识很难编写一个真正有用的脚本,但如果用上if then以后可以做的事情就多起来啦。先看一个简单的例子:
#!/bin/bash
file=/etc/passwd (定义变量$file)
if [ -e $file ] ($file判断是否存在,注意中括号旁边有空格)
then
echo "Password file exists."
fi (注意结尾)
下面是中括号里面一些参数的解释
-e        文件存在
-f        file是一个普通文件(不是目录或者设备文件)
-s        文件长度不为0
-d        文件是个目录
-r        文件具有读权限
-w        文件具有写权限
-x        文件具有执行权限
其实if then要说的东西还很多,大家可以参阅ABS Guide CN,但凭着刚刚说到的这些,你就可以看懂大部分的系统脚本了。
6.6 简单的for loops又是先看例子,创建一个pingall.sh的脚本
#!/bin/bash
for n in {1..20}; do (最关键就是这一句而已)
    host=192.168.0.$n
    ping –c1 $host
done
一般的应用是for variable in value1 value2 … do … done这样的形式。稍微复杂的部分就是in后面的形式,可以是数组(如:{1..20})的形式,可以是枚举(如:Joy Jane Julie)的形式,可以用程序生成(如:$(seq 1 10))的形式,但不能是通配符(如:[1-20])。
6.7 AND OR 与或写脚本少不了使用正则表达式,这里先简单说一下AND OR。
&& 逻辑AND
简单用例如:$ping –c1 –w2 staion1 &> /dev/null && echo “staion1 is up” 。例子ping部分是测试station1是否有响应,&>部分将错误信息隐藏,如果前面的命令成功执行,系统就会执行后面echo部分。
|| 逻辑OR
简单用例如:$ping –c1 –w2 staion1 &> /dev/null || echo “staion1 is down” 。例子ping部分是测试station1是否有响应,&>部分将错误信息隐藏,如果前面的命令失败,系统就会执行后面echo部分。
6.8 Login/Logout script 登陆/注销脚本*/etc/profile*
全局的登陆脚本每个用户登陆都回来执行。其会调用/etc/profile.d/里面的程序
*~/.bash_profile*
个人登陆脚本,每次登陆的时候会执行,一般用以设置环境变量或执行一些每次登陆必做的事(如检查邮件)。一般其会调用~/.bashrc,而~/.bashrc又会调用/etc/bashrc。
*~/.bash_logout*
个人注销脚本,每次注销后执行。一般用以自动备份或者清理临时文件。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109862/showart_2164464.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP