中易网

什么是shell script

答案:1  悬赏:50  
解决时间 2021-01-31 10:31
什么是shell script
最佳答案
或许﹐许多人都已经听过 shell 或 bash 这些名字﹐但不知道您是否知道它们究竟是什麼东东呢﹖
先回到电脑基础常识上吧﹕所有的电脑都是由硬体和软体构成的﹐硬体就是大家能摸得著看得见的部份﹐例如﹕键盤﹑荧幕﹑CPU﹑记忆体﹑硬碟﹑等等。离开了硬体﹐所谓的电脑是不存在的﹐因为整个系统的输入和输出以及运算都离不开硬体。请问﹕如果没有键盤和荧幕您是怎样使用电脑的﹖但是﹐您透过键盤进行的输入﹐以及从荧幕看到的输出﹐真正发挥功能的﹐是软体的功劳。而直接负责和这些硬体进行沟通的软体﹐就是所谓的核心(kernel)﹐kernel 必须能够接管键盤的输入﹐然後交由 CPU 进行处理﹐最後将执行结果输出到荧幕上。当然﹐除了键盤和荧幕外﹐所有的硬体都必须获得 kernel 的支援才能使用。
那麼﹐kernel 又如何知道我们键盤输入的东西是什麼呢﹖那就是我们这里介绍的 shell 所负责的事情了。因为电脑本身所处理的数据﹐都是二进位的机器码﹐和我们人类习惯使用的语言很不一样。比方说﹐输入 pwd 命令﹐我们知道这是 print working directory 的意思(非常简单的人类语音)﹐但作为 kernel 来说﹐它并不知道 pwd 是什麼﹐kernel 只会看机器码﹐这时候﹐shell 就会帮我们将 pwd 翻译为 kernel 能理解的程式码。所以﹐我们在使用电脑的时候﹐基本上就是和 shell 打交道﹐而不是直接和 kernel 沟通﹐更不是直接控制硬体。
简单来看﹐我们就这样来看待它们的关系﹕光从字面来解析的话﹐shell 就是“壳”﹐kernel 就是“核”。好比一个果实一样﹐您第一眼看到的就是壳﹐把壳扒开才看的到里面的核。shell 就是使用者和 kernel 之间的界面﹐将使用者下的命令翻译给 kernel 处理﹐关系如下图﹕

我们在 shell 输入一个命令﹐shell 会尝试搜索整个命令行﹐并对其中的一些特殊字符做出处理﹐如果遇到 CR 字符( Enter ) 的时候﹐就尝试重组整行命令﹐并解释给 kernel 执行。而一般的命令格式(syntax)大致如下﹕
# command parameter1 patrameter2 ...
各命令都有自己的选项(options, 通常用“ - ”符号带领)﹐可输入也可以不输入﹐如果没有额外指定﹐命令通常都有自己的预设选项﹔而参数(argument)则视各程式要求而定﹐有些很严格﹐有些也有预设的参数。例如 "ls -l" 这个命令﹐选项是 -l (long list)﹐而预设的参数则是当前目录。在命令行中,选项和参数都被称为参项(parameter)。
我们经常谈到的 Linux﹐其实是指 kernel 这部份﹐而在 kernel 之外﹐则是各种各样的程式和工具﹐整合起来才成为一个完整的 Linux 发行套件。无论如何﹐Linux 的 kernel 只有一个(尽管有许多不同的版本﹐都由 Linus Tovalds 负责维护)﹐但 kernel 之外的 shell 却有许多种﹐例如 bourne Shell﹑C Shell﹑Korn Shell﹑Zsh Shell﹑等等﹐但我们最常接触到的名叫 BASH (Bourne Again SHell)﹐为 GNU 所加强的一个 burne shell 版本﹐ 也是大多数 Linux 套件的预设 shell 。不同的 shell 都各自有其不同的优缺点﹐有兴趣您可以自行找这方面的资料来看﹐我这里就不一一介绍了。
BASH 这个优秀的 shell﹐之所以会被各大 Linux 套件采用为预设的 shell﹐除了它本身是 open source 程式之外﹐它的强大功能应该是吸引大家目光的重要因素之一。BASH 的功能很多﹐实在很难全部介绍﹐下面只列举其中一少部份而已﹕ 命令补全功能﹕ 当您输入命令的时候﹐您可以输入目录或档案的开首字面﹐然後按‘tab’键将您的命令路径补全。比方说﹐您要 ls 一下 /etc/sysconfig 这个目录的内容(假设您已经在 /etc 目录下了)﹐您可以只输入 ls sy 然後接连按两下 tab 键﹐然後就会将 /etc/ 目录下所有以 sy 开头的档案和目录显示出来﹐您或许可以看到 sysconfig﹑sysctl.conf ﹑syslog.conf 这三个结果﹔如果您只输入 ls sys 再按两下 tab 的话﹐结果是是一样的﹐因为在 /etc/ 目录下面﹐所有以 sy 开头的档案﹐第 3 个字面都是 s 而没有其它字面了﹔如果您输入 ls sysc 再重复这个动作﹐那麼显示结果就剩下 sysconfig 和 sysctl.conf 而已﹐因为以 sysc 开头的只有这两个档﹐如果您再按 ls sysco 接一个 tab﹐那就会帮您将 sysconfig 这个唯一以 sysco 开头的档案补全。
如果您所输入的路径﹐是唯一的﹐那麼只要按一下 tab 就能补全﹐否则﹐会听到一下 beat 声﹐这时您再补一下 tab ﹐就会将所有以此路径开头的档案列出来﹔假如符号条件的档案太多﹐那系统会先将符号条件的档案数目告诉您﹐例如 242 possibilities﹐然後您按 y 才显示﹐如果按 n 则让您增加命令的输入﹐然後您可以重复这些动作﹐直到您所输入的路径只剩唯一的对应﹐才可以用一个 tab 补全。
同样的﹐这个功能也可以用在输入命令的时候﹐比方说﹐您要输入 Xconfigurator 命令﹐那您只需输入 Xc 然後按一下 tab 就可以了﹗是否很方便呢﹖ ^_^
Tip﹕用 tab 来补全命令﹐不但方便迅速﹐而且也比较保险。因为﹐如果您前面的路径输入不正确﹐用 tab 是不能完成补全的﹐这可以避免您输入错误的路径而执行错误的程式。我强烈建议您执行每一个命令都常试用 tab 补全功能﹐以确保其正确性。(多敲这个 tab 键没什麼坏处啦)
命令记录表﹕ 每次您输入一个命令﹐并按 Enter 执行之後﹐那您这个命令就被存放在命令记录表(command history)中﹐而每个命令都有一个记录号码﹐您可以用 history命令来看看当前的命令历史表。这样﹐您只要用向上方向键﹐就可以依次呼叫出您最近所输入的命令﹐按下方向键则退回最新的命令﹐找到您想要重新输入的命令﹐然後再按 Enter 即可。
不过﹐也有一下更便利的办法﹕您可以输入 !nnn (其中的 nnn 是 history 命令找到的命令记录号码)﹐就能执行指定的旧命令了﹔如果您输入 !! 再 Enter 的话﹐那就是重复上一个命令(和按向上方向键再 Enter 一样)﹔如果您输入 !ls 的话﹐则是最後一次的 ls 开头的命令﹐如果是 !cd 那就是上一个 cd 开头的命令﹐如此类推﹔如果您按著 Ctrl 和 R 两个键之後﹐然後输入您以前曾经输入过的命令﹐那它会和上面介绍的补全功能一样﹐将您以前输入过的命令补全起来。呵~~ 太厉害啦﹗
Bash 会将您登录之後的所有命记录在记 cache 里面﹐然後﹐只要您成功退出这个 shell 之後﹐那这些记录就会存放到家目录的 ~/.bash_history 这个档里面(小心看﹐它是以 . 开头的档案哦﹐也就是隐藏档是也﹐您要用 ls -a 才看得到。) 不过﹐这个档只保持一定数量的命令记录而已﹐您可以透过 $HISTFILESIZE 这个变数(我们马上会介绍变数)﹐来获得或改变档案的记录数量。
alias 功能﹕ 在 Linux 里面﹐您可以透过 alias (别名) 的功能﹐来定义出一个命令的预设参数﹐甚至用另外一个名称来简化一个命令(及参数)。如果您输入 alias 这个命令﹐您就会看到目前的 alias 有哪些。您或许会看到其中有一个﹕ alias rm='rm -i' 这行﹐它的意思是﹕如果您执行 rm 这个命令﹐那麼系统实际执行的命令会带上 -i 的参数﹐也就是以 interactive 模式进行﹐结果是在您进行删除档案的时候﹐会经过您的确认才真正删除。在某些没有这个 alias 的系统中﹐那您执行 rm 而不另行指定 -i 的话﹐那就无声无息的将您能砍的档案给砍掉。小心哦﹐在 Linux 上面﹐档案一旦删除就没办法救回了﹗所以﹐用心的系统﹐会帮您做这个 alias。
在另外一种情形之下﹐当您发现某些长命令会经常使用到﹐但打字起来挺麻烦的﹐那您就可以用 alias 来解决。比方说﹐您每次关机要输入的命令是 shutdown -h now 这麼一串﹐那您先输入 which shd (目的是确定现有的命令名称)﹐如果您并没有发现这个命令出现在您的命令路径之中的话﹐那您可以输入 alias shd='shutdown -h now'﹐然後再输入 shd 就可以关机了﹗不过﹐现在不要执行它﹗﹗因为您这样真的会把机器关掉哦~~ 请您用 alias 替换其它的长命令看看﹖
如果您要取消一个 alias﹐可以使用 unalias 命令﹐如﹕unalias shd 。
一旦您满意您的新 alias ﹐那您可以修改您的 ~/.bashrc 这个档﹐将它加在其它 alias 命令之後﹔假如您想系统上所有使用者都能使获得这个 alias ﹐那就将它放到 /etc/bashrc 里面吧。(如果您目前还不会编辑档案﹐那就回到上一章补习 vi 吧:-)
强大的 script 能力 玩过 DOS 的朋友﹐一定会知道 batch 档案的功能﹐在 BASH 本身可以帮您执行一系列根据条件判断的命令﹐其功能比 DOS 的 batch 强大多了。在本章的後面部份﹐会详细讨论 shell script 的基本技巧。 事实上﹐bash 还有许多厉害的功能﹐恐怕很难全部介绍了﹐还是留给您自己去找寻了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我是16岁男生。抽烟有一年了。体检时能看出来
求一本以前看过的小说,现在想不起来了,讲的
为什么要写祝福语
宋末词四大家
结婚添置新家要买什么,越详细越好,谢谢
高端的智能厨房家电都有哪些品牌?
千分就是0.0几吗 百分就是0.几吗
关于牧场物语风之集市的料理
北京牛羊肉市场在哪里?
我国目前已有的鸟类自然保护区
房地产公司的项目建到什么程度,就可以开始销
wow鲸鲨坐标在哪里或具体位置,我想单刷他却
正在健身,请问做杠铃推胸之前应该怎样热身?
做学大教育咨询师好还是在育婴早教机构做教育
满族头饰怎么做?
推荐资讯
大学生用什么靠谱的交友的比较好
接到电话说是让去青岛市南区香港西路73号裕源
vivox6跟vivox6为什么打电话 有时候打不通响
开着奔驰A级,让我成为别人的笑柄,为此,我
梅雨季节是在几月份?
我们是一家在全国有30多家分公司的大公司的英
新学期对同学的祝福语
在日本我的手机停机可以重新往银行成钱吗
请鞭打我吧,公瑾!这个称号是不是只有情侣才
用三氯化铁蚀刻铜,蚀刻过后如何提取废蚀刻液
WOW6.05H本每天只能刷一次吗
蛋烧饭怎么做才好吃?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?