设为首页 收藏本站
查看: 674|回复: 0

初识shell-DreamScape

[复制链接]

尚未签到

发表于 2018-8-21 11:38:34 | 显示全部楼层 |阅读模式
  shell为何物?
  相信只要摸过计算机,对于操作系统 (不论是 Linux 、 Unix 或者是 Windows) 有点概念的朋友们大多听过这个名词,因为只要有操作系统,那么就离不开 Shell 这个东西。Linux 的管理常常需要透过远程联机,而联机时文字接口的传输速度一定比较快, 而且,较不容易出现断线或者是信息外流的问题。管理整个计算机硬件的其实是操作系统的核心 (kernel),这个核心是需要被保护的。 所以我们一般使用者就只能透过 shell 来跟核心沟通,以让核心达到我们所想要达到的工作。
  说通俗些:shell就是负责与系统核心kernel进行通信的一个接口工具,通过与核心通信达到用户所想要达到的结果。
  Linux下的shell
  在早年的 Unix 年代,发展者众多,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的。
cat /etc/shells     --查看系统中存在的shell

  /bin/sh
  /bin/bash
  /sbin/nologin
  /bin/dash
  /bin/zsh
  /bin/bash 是 Linux 默认的 shell ,那为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件呢? 这是因为系统某些服务在运行过程中,去检查使用者能够会使用的 shells ,而这些 shell 的查询就是基于 /etc/shells 这个文件。bash 是 GNU 计划中重要的工具软件之一,目前也是 Linux 发行版的标准 shell 。 bash 主要兼容于 sh ,并且依据一些使用者需求,而加强的 shell 版本。bash 主要的优点有如下几个方面:
  命令历史记录history
  我们可以通过在命令列按『上下键』来找到前或后一个输入的命令,默认的命令记忆功能可以到达 1000 个。也就是说, 你曾经输入过的命令几乎都被记录下来了。这么多的命令记录均保存在你的家目录内的 .bash_history文件里。 需要留意的是 ~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中。
  Tab键命令补全
  如果我想要知道我的环境中可以运行的命令有几个,可直接在 bash 的提示字符后面连续按两次 [Tab] 按键就能够显示所有的可运行命令了。那如果想要知道系统当中所有以 c 为开头的命令咋弄呢?就按下『 c[Tab][Tab] 』就好。
  给命令起别名
  假如我需要知道这个目录底下的所有文件 (包含隐藏档) 及所有的文件属性,那么我就必须要下达『 ls -al 』这样的命令,是否觉得麻烦,有没有更快的取代方式?这时就需要使用命令别名了。如alias la=‘ls –al’,则运行la相当于执行了ls –al这个命令。
  工作管理job control,fg,bg
  使用前后、后台的控制可以让工作进行的更为顺利。至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中运行,而不用担心用了 [Ctrl] + c 来停掉该程序。此外,也可以在单一登录的环境中,达到多任务的目的。
  程序化脚本shell scripts
  在 Linux 底下的 shell scripts 可以将你平时管理系统常需要下达的连续命令写成一个文件, 该文件并且可以透过对谈交互式的方式来进行主机的侦测工作,也可以基于shell 提供的环境变量及相关命令来进行设计。以前在 DOS 底下需要程序语言才能写的东西,在 Linux 底下使用简单的 shell scripts 就可以帮你达成。
  通配符
  除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与执行命令。 举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件使用『 ls -l /usr/bin/X* 』就知道了。
  shell 变量功能
  变量是 bash 环境中非常重要的一个功能,我们知道 Linux 是多用户多任务的环境,每个用户登陆系统都能取得一个 bash , 每个人都能够使用 bash 下达某个命令来达到既定的目的,可问题是, bash 是如何得知同一个命令执行的不同结果呢?这就需要『变量』了。
  你可以利用 echo 这个命令来取用变量, 但是,变量在被取用时,前面必须要加上『 $ 』才行,举例来说,要知道 PATH 的内容,需 echo $PATH 或 echo ${PATH}。
  创建一个自定义的变量 echo $mypath,此时如果执行,结果是空的,执行 mypath=/usr/bin/mypath,再 echo $mypath,会出现 =/usr/bin/mypath。通过等号=对变量进行了赋值。下面就来列举下常用的配置的规则:

  • 变量与变量内容以一个等号『=』来连结;   
  • 等号两边不能直接接空格符,如 『mypath=   /usr/bin/mypath』或『mypath=/usr/bin   /mypath』为错误;   
  • 变量名称只能是英文字母与数字与下划线,开头字符不能是数字;   
  • 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容引用起来,但双引号内的特殊字符如 $ 等,可以保有原本的特性,如『var="lang is $LANG"』则『echo $var』可得『lang is en_US』;单引号内的特殊字符则仅为一般字符 (纯文本),如『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』;   
  • 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;   
  • 在一串命令中,还需要引用其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。如想要取得系统核心版本信息『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』;   
  • 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如『PATH="$PATH":/usr/bin』;   
  • 若该变量需要在其他子程序运行,则需要以 export 来使变量变成全局环境变量:『export PATH』,这时全局变量并没有及时生效,需要bash   
  • 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 ;   
  • 取消变量的方法可用 unset :『unset 变量名称』。例如取消 mypath的配置:『unset mypath』。
  使用 env 查看系统的环境变量及其说明:env 是 environment (环境) 的简写,可以列出系统中存在的所有环境变量,export 也可以实现这个功能。如下就介绍下几个常用的环境变量:

  • HOME  代表用户的家目录。我们可以使用 cd ~ 去到自己的家目录,或者利用 cd 就可以直接回到用户家目录。
       
  • SHELL  告知我们,目前这个环境使用的 SHELL 是哪支程序? Linux 默认使用 /bin/bash 的。
       
  • HISTSIZE  这个与『历史命令 history』有关,我们曾经下达过的命令可以被系统记录下来,而记录的数量则是由这个值来配置的。
       
  • MAIL  当我们使用 mail 这个命令在收信时,系统会去读取的邮件信箱文件 (mailbox)。
       
  • PATH  运行文件搜寻的路径,目录与目录中间以冒号(:)分隔, 由于文件的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是很重要的。
       
  • LANG  语系编码数据,当我们在启动某些 perl 的程序语言文件时,他会主动的去分析语系数据文件, 如果发现有他无法解析的编码语系,可能会产生错误。一般来说,我们中文编码通常是 zh_CN.UTF-8。
       
  • RANDOM  随机随机数的变量,目前大多数的发行版都会有随机数生成器,那就是 /dev/random 这个文件。 我们可以透过这个随机数文件相关的变量 ($RANDOM) 来随机取得随机数值喔。在 BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间,所以,你只要 echo $RANDOM 时,系统就会主动的随机取出一个介于 0~32767 的数值。如我想要使用 0~9 之间的数值则可利用 declare 指定数值类型即可实现。

  使用 set 查看所有变量 (含环境变量与自定义变量)
  bash 可不只有环境变量喔,还有一些与 bash 操作接口有关的变量,以及用户自己定义的变量存在的。set命令除了可现实环境变量外,还会将其他在 bash 内的变量全部显示出来。如下就介绍下几个:
  [root@dyqd2011 ~]# set
  BASH=/bin/bash

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554654-1-1.html 上篇帖子: 作业shell-12115084 下篇帖子: shell 信号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表