Shell脚本的执行方式-50

来源:互联网 发布:淘宝自己的评价不见了 编辑:程序博客网 时间:2024/05/18 14:22

Shell脚本的执行方式

        一、echo输出命令
            [root@localhost ~]# echo [选项][输出内容]
            选项:
                -e: 支持反斜线控制的字符转换。

            1、其实echo非常简单,我们举个最简单的例子,
            [root@localhost ~]# echo ‘hello world!’
            这样就输出了hello world!

            但需要注意的是,如果字符串当中有空格的话就必须用引号隔开,而且如果如果以感叹号’!’结尾的话,只能用单引号,因为叹号在双引号里出现是有特殊意义的,后面会学到,如果直接用双引号输出会出错,如图:
            shell脚本echo输出

            2、如果给echo添加-e选项的话,就会有特殊属性。
            -e 代表可以使用转义符’\’。
            转义符的作用就是使他后面的字符不被翻译,按原样进行输出。

            比如我们想输出’\’,但是如果直接echo \的话,系统会认为是换行,而不会输出’\’,所以要想输出’\’,就必须在前面添加一个’\’,也就是’\\’,然后添加-e参数。
            如图:
            linux转义符'\'

            下面列出经过转义符转换后的字符代表的作用:
            \\ : 输出’\’本身
            \a : 输出警告音
            \b : 退格键,也就是向左删除键
            \c : 取消输出行末的换行符。和’-n’选项一致
            \e : ESCAPE键
            \f :换页符
            \n : 换行符
            \r : 回车键
            \t : 制表符,也就是TAB键
            \v : 垂直制表符
            \0nnn : 按照八进制ASCII码表输出字符。其中’0’为数字零,nnn是三位八进制数
            \xhh : 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数。

            3、可能大家有点迷糊,不用急,我来演示一下大家就明白了,比如我们就用’\b’退格键来演示吧,
            [root@localhost ~]# echo “abcd”
            这样我们正常输出abcd,那我们添加-e参数然后添加\b退格键试试:
            [root@localhost ~]# echo -e “abc\bd”
            因为\b是退格键,所以左边的c就被删除了,所以最终输出的就是abd,如图:
           echo -e选项
            加了-e参数’\’才会有效果,把’\b’当作退格键把’c’给删除了,不然就会直接输出,大家自己多练习一下就知道了。

            我们再举几个例子:
            比如echo -e “\a”,就会听到一声警告音。

            比如:
            [root@localhost ~]# echo “a\tb\tc\nd\te\tf”
            大家可能一看这么大一堆字母挺乱的,其实输出就不乱了,如图:
            echo -e
            也就是说abc之间用一个制表符间隔开,然后再用\n换行,def再分别用制表符隔开。就这么简单。

            好,我们再看一个例子:
            [root@localhost ~]# echo -e \
            “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”
            如图:
            echo -e ASCII码表输出
            大家是不是很奇怪啊,为什么和上面的例子输出的一样的结果呢?
            其实很简单,上面的表格已经告诉大家了,\xhh 就代表按十六进制ASCII编码输出字符,’\xhh’解释一下,其中’\x’代表按照16进制ASCII输出,hh代表两个16进制的ASCII字符,那么其实ASCII字符是固定的,我们可以从网上找ASCII码表,
            ASCII码表
            看上图,我用红框标出的部分,大家看出什么了吗?
            也就是说十六进制的ASCII码61~66分别代表字符a~f,那么我们回头再看这段命令:
            [root@localhost ~]# echo -e \
            “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”
            是不是’\x61’=a,’\x62’=b…
            然后加上制表符和换行符就输出了abcdef按表格的格式输出了啊。
            这里给出大家ASCII码表的地址,大家自己查看:http://www.360doc.com/content/10/1007/22/3775569_59187136.shtml

            其实利用ASCII码表格式的用法很少用到的,我们理解就好。

        4、[root@localhost ~]# echo -e “\e[1;31m hello\e[0m”
        #输出颜色,如图:
       echo -e 输出颜色参数
        看,是不是挺有意思的啊,可以用echo输出颜色。我们来解释一下:
        -e是特殊选项不用解释
        \e[1; 这是输出颜色的开始标签
        \e[0m 这是输出颜色的结束标签
        中间部分:
        31m代表红色,颜色和开始标签间不留空格,颜色开始标签和内容间留有空格。
        hello是要输出的字符。

        那么不但可以输出红色,还可以输出其他颜色,只要把颜色代码更换为相应的颜色代码就可以了,颜色代码分别如下:
        30m=黑色,31m=红色,32m=绿色,33m=黄色
        34m=蓝色,35m=洋红,36m=青色,37m=白色
        如图:
        echo 输出颜色

    二、我们来写第一个脚本
        1、[root@localhost ~]# vi hello.sh
        虽然在Linux里面不需要扩展名,但我们还是习惯把文件添加一个标志性的后缀,比如.sh就代表脚本文件,建议大家在建脚本文件的时候都用.sh进行标识。

            然后在里面编辑内容:
            #!/bin/bash 注意这行前面的’#’不是注释符,这一整行代码代表这行下面写的是脚本内容,是shell程序,这句话一定不要省略,不然再一些比较复制的脚本里就会出现错误。
            所以这行不是注释,一定记住,他的作用相当于html里的最前面的!DOCTYPE声明一样,声明这是一个什么格式的文档。只有正确声明了才不会出错。

            #The first program
            # Author:mageo (E-mail:zh5653@163.com)
            上面这两行就是注释没错了。
            大家在写程序的时候一定要养成注释的好习惯,因为一些复制的程序如果我们不进行注释,可能过几天我们自己都忘记了,不知道每行内容是干什么用的了。一些复杂的程序可能需要每行命令干嘛的我们都需要标注的,可以说注释是我们编程最基本要会的步骤。当然非常简单的就可以不用标注。

            echo -e “Mr.mageo is the most honest man in meijiedu”
            好,我们来演示一下,如图:
           shell脚本的输出方式
            好的,我们直接wq保存退出,这样我们一个脚本就写完了。

        2、脚本执行
            要想执行脚本,我们有两种方法:

            A、赋予执行权限,直接运行
            chmod 755 hello.sh
            ./hello.sh
            如图:
            脚本执行方法
            我们给脚本文件赋予了执行权限后可以直接用绝对路径或相对路径执行,就输出了我们刚刚编写的脚本的内容。

            B、通过Bash调用执行脚本
            bash hello.sh
            也就是直接用解释器来执行脚本,利用这种方法不用给文件赋予执行权限也同样可以执行,但不建议用这种方法,我们还是习惯用第一种方法来执行脚本。
            bash脚本执行方式

    三、案例脚本演示
        首先给大家提供一个案例演示的脚本文件的下载地址,大家自己下载:
        http://pan.baidu.com/s/1pJvgBWZ
        大家下载下来解压后把.sh文件上传到linux系统里面,怎么上传我就不介绍了,如果大家不会的话参考下面这篇文章:
        http://www.ql2015.cn/lamp/linux/509.html
        我的已经传好了,如图:
       Tetris.sh案例
============
        Tetris.sh就是我们刚刚上传好的一个脚本文件,我们看到他没有可执行权限,需要我们修改一下权限,然后我们执行试试,如图:
       脚本文件授权
        他提示’^M’不知道是什么字符,或没有那个文件或目录,什么原因呢?
        其实平时我们会经常遇到这种情况,所以这里给大家解释一下为什么。
=============
        首先,我们用cat命令加 -A选项来查看一下我们前面自己编写的那个简单脚本,如图:
       shell脚本的回车符
        大家发现了什么?是不是比我们编辑的内容多了好多’$’符号啊,其实可以看的出来,这个’$’符号都是在每行的结尾出现的,什么意思呢?
        其实cat命令的’-A’选项是可以显示隐藏字符的,而这个’$’符号其实就是我们每行结束的时候我们按回车留下的字符.
        也就是说在linux里面回车符号用’$’来表示。
===============
        好的,那么我们再用cat -A命令来查看刚才上传的这个脚本文件Tetris.sh文件,如图:
        windows下shell脚本回车符
        大家又发现了什么呢?是不是每行的 结尾都有’^M$’三个字符啊?
        对,没错,’^M$’就代表是回车符号,但是为什么不是’$’呢?
        其实是因为这个脚本是在windows下编辑的,在windows里编辑的shell脚本文件的回车符都变成了’^M$’,因为在windows里面,’^M$’就代表回车。

        所以这就是为什么我们无法执行这个脚本的原因,因为里面的回车符是windows里面的,报错提示说’^M’不知道是什么。正是因为linux不能识别这个回车符导致的。
        也就是说要想让这个脚本能正常执行,那么就需要把所有的回车符都换成Linux里面的。也就是说把’^M$’换成’$’就可以了。

=====================
        但是大家不要傻傻的一个个去替换,因为在linux里有这么一个程序dos2unix,可以把windows下编辑的脚本转换成Linux里的脚本的。而且命令很简单,如下:
        [root@localhost sh]# dos2unix Tetris.sh
        这样这个文件就转换成linux的脚本文件了,如图:
        linux脚本转换命令dos2unix
        哦,他提示我没有安装这个程序,好吧,不用急,我们用Yum命令来在线安装一下就好了。
        [root@localhost sh]# yum -y install dos2unix
        然后我们再来转换,如图:
        转换脚本命令dos2unix
        这样就转换成功了。
==============
        好的,我们来执行一下,如图:
        shell脚本编辑的俄罗斯方块
        呵呵,是不是挺有意思,是一个用shell脚本编辑的俄罗斯方块的游戏。这是一个非常好的脚本程序的代表作,大家可以研究研究。

        那么刚才我们用的是dos2unix命令把windows下编辑的脚本转换成linux下的脚本程序。是不是我们可以用unix2dos把linux脚本转换成windows下的脚本程序呢?
        你猜对了,完全可以,这两个命令我们会经常用到,如果你的系统里没有,就直接用yum命令在线安装即可。

    本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:http://www.ql2015.cn,谢谢!

0 0
原创粉丝点击