- 论坛徽章:
- 0
|
5.1时候我发的帖子.
这个blog排版很垃圾
原贴在这里
http://www.linuxdiyf.com/bbs/viewthread.php?tid=45182&highlight=%2Bkaron%5C_fedora
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@localhost Desktop]# echo "echo linux110">fistshell 把echo linux110输入到fistshell文件中,这是fistshell文件中内容就是echo linux110
[root@localhost Desktop]# bash fistshell 执行fistshell文件中的命令
linux110 这是输出,和你在shell下直接执行echo linux110是一样的
再看看fistshell是什么格式的文件
[root@localhost Desktop]# file fistshell
fistshell: ASCII text 嘿嘿,是文本文件。
2。可以在文本文件头部加入#!/bin/bash也就是命令解释器的名称,并且修改文件为可执行文件,来让文件和其他程序一样执行。
例子
在上面的fistshell头部加入#!/bin/bash,并保存。
这里或许有人要问#不是表示注释行么?加这个有什么用。
试试看,你会发现gedit中的文档变色了。高亮显示!
看看文件属性。
[root@localhost Desktop]# file fistshell
fistshell: Bourne-Again shell script text executable bash可执行文本,嘿嘿
[root@localhost Desktop]# ls -l fistshell
-rw-r--r-- 1 root root 26 05-05 17:14 fistshell 表明fistshell是可执行文本,但是没有任何用户对他有执行权限。
这就需要下面的步骤。
[root@localhost Desktop]# chmod 755 fistshell ; ls -l fistshell
-rwxr-xr-x 1 root root 26 05-05 17:14 fistshell 现在就可以把他当成应用程序来执行了。
[root@localhost Desktop]# ./fistshell
linux110 成功。
无论使用那种方法,shell脚本后面的语句都将被当作参数。
D:关于shell变量。
1,bash使用的是无类型变量,即通常把变量作为字符串或者文本对待,这个以后说,shell可以把命令或者命令的输出作为变量。
例子
修改fistshell文件为:
#!/bin/bash
MYLINUX=$(uname -a) 表示把uname -a的输出赋给MYLINUX变量,注意格式。
echo $MYLINUX 引用MYLINUX变量,作为echo的输入,注意格式。
保存
[root@localhost Desktop]# ./fistshell
Linux localhost.localdomain 2.6.20-1.2312.fc3 #1 Tue Apr 10 15:09:44 EDT 2007 i686 i686 i386 GNU/Linux 成功
2,特殊变量,这是一些特殊指定的变量,介绍几个常用的。
$1 你的脚本名 $2 第一个参数 $3 第2个参数 $#表示你脚本的参数数量 $?表示你的上一个命令的退出状态,0表示正常退出。
例子
修改fistshell文件为:
#!/bin/bash
echo $? 测试$?变量
echo $# 测试$#变量
echo $0 测试$0变量
echo $1 测试$1变量
echo $2 测试$2变量
[root@localhost Desktop]# uname;./fistshell karon flame 脚本名文fistshell, 第一个参数为karon,第二个参数为flame,总参数个数为2。
Linux 完全为了测试$?存在
0 uname完全退出
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@localhost Desktop]# ./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脚本中变量是无类型的,所以在他需要某一类型的时候可以自动转换。
未完成
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/36086/showart_320761.html |
|