Chinaunix首页 | 论坛 | 博客
  • 博客访问: 794388
  • 博文数量: 858
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 17:43
文章分类

全部博文(858)

文章存档

2011年(1)

2008年(857)

我的朋友

分类: LINUX

2008-08-29 17:52:13

 
A:为什么要学习shell脚本
shell脚本是什么?可以吃么?
答:shell脚本相当于ms_dos下的批处理文件,但是他还可以包含复杂的控制,算法判断,用户定义变量和函数。不可以吃。
shell脚本很难么?
答:相对于其他语言shell脚本比较简单,譬如你可以用A="linux110",B=1234来设置一个字符串变量,和一个int变量。
我是系统管理员,我学shell有用么?
答:当然有,shell脚本可以帮助你更快的进行日常管理工作,把一大堆命令组合起来更好的执行,更好执行。
我只想学学linux的系统结构,只学学shell基本命令就可以了,搞脚本做什么?
答:linux下的rc脚本,就是shell命令,即使你不会写,那么至少也要会读吧。

B:什么是shell脚本,shell在系统中起什么作用。
简单的说,一切可以在shell中运行的项目,都可以称为shell脚本。fedora就是使用/etc/rc.d/rc.sysinit和/etc/rc这样的shell脚本来启动各种服务的。

C:执行shell命令
shell的最大优点就是可以用任何文本编辑器打开。
1。使用bash命令来执行shell
这种方法的特点是文件不需要是可执行文件,不必chmod修改,用于执行简单的快速的命令最有效果,这种情况下脚本名称是bash命令的一个参数。
例子
[root@localhostDesktop]#echo"echolinux110">fistshell把echolinux110输入到fistshell文件中,这是fistshell文件中内容就是echolinux110
[root@localhostDesktop]#bashfistshell执行fistshell文件中的命令
linux110这是输出,和你在shell下直接执行echolinux110是一样的
再看看fistshell是什么格式的文件
[root@localhostDesktop]#filefistshell
fistshell:ASCIItext嘿嘿,是文本文件。
2。可以在文本文件头部加入#!/bin/bash也就是命令解释器的名称,并且修改文件为可执行文件,来让文件和其他程序一样执行。
例子
在上面的fistshell头部加入#!/bin/bash,并保存。
这里或许有人要问#不是表示注释行么?加这个有什么用。
试试看,你会发现gedit中的文档变色了。高亮显示!
看看文件属性。
[root@localhostDesktop]#filefistshell
fistshell:Bourne-Againshellscripttextexecutablebash可执行文本,嘿嘿
[root@localhostDesktop]#ls-lfistshell
-rw-r--r--1rootroot2605-0517:14fistshell表明fistshell是可执行文本,但是没有任何用户对他有执行权限。
这就需要下面的步骤。
[root@localhostDesktop]#chmod755fistshell;ls-lfistshell
-rwxr-xr-x1rootroot2605-0517:14fistshell现在就可以把他当成应用程序来执行了。
[root@localhostDesktop]#./fistshell
linux110成功。
无论使用那种方法,shell脚本后面的语句都将被当作参数。

D:关于shell变量。
1,bash使用的是无类型变量,即通常把变量作为字符串或者文本对待,这个以后说,shell可以把命令或者命令的输出作为变量。
例子
修改fistshell文件为:
#!/bin/bash
MYLINUX=$(uname-a)表示把uname-a的输出赋给MYLINUX变量,注意格式。
echo$MYLINUX引用MYLINUX变量,作为echo的输入,注意格式。
保存
[root@localhostDesktop]#./fistshell
Linuxlocalhost.localdomain2.6.20-1.2312.fc3#1TueApr1015:09:44EDT2007i686i686i386GNU/Linux成功
2,特殊变量,这是一些特殊指定的变量,介绍几个常用的。
$1你的脚本名$2第一个参数$3第2个参数$#表示你脚本的参数数量$?表示你的上一个命令的退出状态,0表示正常退出。
例子
修改fistshell文件为:
#!/bin/bash
echo$?测试$?变量
echo$#测试$#变量
echo$0测试$0变量
echo$1测试$1变量
echo$2测试$2变量
[root@localhostDesktop]#uname;./fistshellkaronflame脚本名文fistshell,第一个参数为karon,第二个参数为flame,总参数个数为2。
Linux完全为了测试$?存在
0uname完全退出
2总参数个数
./fistshell脚本名
karon第一个参数
flame第二个参数
3,bash中的扩展参数
$MYLINUX其实是${MYLINUX}的简略写法,当必须要明确的把两个变量分开的时候,可以使用这个把他们分隔开。
另外${MYLINUX}还提供了一种参数扩展的方式。
下面是常见的结构和他们含义。
${var:-value}如果变量未设置为空,扩展这个变量的值为value
例子
修改fistshell如下。
#!/bin/bash
THIS="subbo"THIS变量为subbo
THIS=${THIS:-"karon"}如果THIS变量为空,那么设置为karon,并且重新赋给THIS
THAT=${THAT:-"karon"}如果THAT变量为空,那么设置为karon,并且赋给THAT
echo$THAT
echo$THIS
[root@localhostDesktop]#./fistshell
karon
subbo成功
还有一些扩展结构的含义如下
${var#pattern}从var值开头,清除与pattern匹配的最短部分
${var##parttern}。。。。。。。。。。。。。。。最长部分
${var%pattem}从var末尾,清除与pattren匹配的最短部分
${var%%pattem}。。。。。。。。。。。。。。最长部分。
例子
修改firstshell为
#!/bin/bash
FILENAME="/home/karon/pepsi.txt"
FILE=${FILENAME##*/}
DIR=${FILENAME%/*}
NAME=${FILE%.*}
EXETEND=${FILE#*.}

echo$FILE
echo$DIR
echo$NAME
echo$EXETEND这个就不用解释了吧,其实这是个很有意思的例子,选自《unixshell编程精解》

D:shell脚本中的计算。
shell脚本中变量是无类型的,所以在他需要某一类型的时候可以自动转换。

未完成

系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL系统管理员的SHELL
阅读(250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~