zoukankan      html  css  js  c++  java
  • Linux编写shell脚本的注意事项

    1. 命令的运行是从上而下、从左而右的分析与运行;
    2. 命令的下达就如同第五章内提到的: 命令、选项与参数间的多个空白都会被忽略掉;
    3. 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键;
    4. 如果读取到一个 Enter 符号 (CR) ,就尝试开始运行该行 (或该串) 命令;
    5. 至於如果一行的内容太多,则可以使用『 [Enter] 』来延伸至下一行;
    6. 『 # 』可做为注解!任何加在 # 后面的数据将全部被视为注解文字而被忽略!

    如此一来,我们在 script 内所撰写的程序,就会被一行一行的运行。现在我们假设你写的这个程序档名是 /home/dmtsai/shell.sh 好了,那如何运行这个文件?很简单,可以有底下几个方法:

    • 直接命令下达: shell.sh 文件必须要具备可读与可运行 (rx) 的权限,然后:
      • 绝对路径:使用 /home/dmtsai/shell.sh 来下达命令;
      • 相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来运行
      • 变量『PATH』功能:将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/
    • 以 bash 程序来运行:透过『 bash shell.sh 』或『 sh shell.sh 』来运行

    反正重点就是要让那个 shell.sh 内的命令可以被运行的意思啦! 咦!那我为何需要使用 『./shell.sh 』来下达命令?忘记了吗?回去第十一章内的命令搜寻顺序察看一下, 你就会知道原因了!同时,由於 CentOS 默认使用者家目录下的 ~/bin 目录会被配置到 $PATH 内,所以你也可以将 shell.sh 创建在 /home/dmtsai/bin/ 底下 ( ~/bin 目录需要自行配置) 。此时,若shell.sh 在 ~/bin 内且具有 rx 的权限,那就直接输入 shell.sh 即可运行该脚本程序!

    那为何『 sh shell.sh 』也可以运行呢?这是因为 /bin/sh 其实就是 /bin/bash (连结档),使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的功能来运行 shell.sh 这个文件内的相关命令的意思,所以此时你的 shell.sh 只要有 r 的权限即可被运行喔!而我们也可以利用 sh 的参数,如 -n 及 -x 来检查与追踪 shell.sh 的语法是否正确呢! ^_^

    路径与命令搜寻顺序

    我们在第六章第七章都曾谈过『相对路径与绝对路径』的关系, 在本章的前几小节也谈到了 alias 与 bash 的内建命令。现在我们知道系统里面其实有不少的 ls 命令, 或者是包括内建的 echo 命令,那么来想一想,如果一个命令 (例如 ls) 被下达时, 到底是哪一个 ls 被拿来运行?很有趣吧!基本上,命令运行的顺序可以这样看:

    1. 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
    2. 由 alias 找到该命令来运行;
    3. 由 bash 内建的 (builtin) 命令来运行;
    4. 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。

    举例来说,你可以下达 /bin/ls 及单纯的 ls 看看,会发现使用 ls 有颜色但是 /bin/ls 则没有颜色。 因为 /bin/ls 是直接取用该命令来下达,而 ls 会因为『 alias ls='ls --color=tty' 』这个命令别名而先使用! 如果想要了解命令搜寻的顺序,其实透过 type -a ls 也可以查询的到啦!上述的顺序最好先了解喔!

    例题:
    配置 echo 的命令别名成为 echo -n ,然后再观察 echo 运行的顺序
    答:
    [root@www ~]# alias echo='echo -n'
    [root@www ~]# type -a echo
    echo is aliased to `echo -n'
    echo is a shell builtin
    echo is /bin/echo
    
    瞧!很清楚吧!先 alias 再 builtin 再由 $PATH 找到 /bin/echo 啰!
  • 相关阅读:
    垃圾回收app冲击(一)
    本篇看似是一篇拍马屁的博客!但是真情实感!
    搜索建议
    冲击团队项目需求分析
    疫情分析冲击(五)
    疫情分析冲击(四)
    疫情分析冲击(三)
    疫情分析冲击(二)
    垃圾分类网站
    Android学习——singleInstance
  • 原文地址:https://www.cnblogs.com/aguai1992/p/4661637.html
Copyright © 2011-2022 走看看