免费注册 查看新帖 |

Chinaunix

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

传说中的shell [复制链接]

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

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP