1、shell 简介

Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理,shell是一个命令解释器,是一个工具箱, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。

下面是流程示意图:

2,Linux执行命令

1, 在shell中可执行的命令有两类:

第一类:内部命令shell自带的命令,所以执行更快

第二类:外部命令,在文件系统路径下有对应的可执行程序文件,执行需要将硬盘中的文件加载到内存再执行所以比较慢,

  1. help #查看内部命令列表
  2. enable #查看可用的内部命令/管理内部命令
  3. enable CMD #启用某CMD
  4. enable -n CMD #禁用某CMD
  5. enable -n #查看所有禁用的命令
  6. type COMMAND #区分命令为外部还是内部
  7. which CMD #查看命令来源

例子

  1. [root@c43i08102.cloud.i09.amtest90 /root]
  2. #type pwd
  3. pwd is a shell builtin
  4. [root@c43i08102.cloud.i09.amtest90 /root]
  5. #type -a pwd
  6. pwd is a shell builtin
  7. pwd is /usr/bin/pwd
  8. [root@c43i08102.cloud.i09.amtest90 /root]
  9. #type init
  10. init is /sbin/init
  11. [root@c43i08102.cloud.i09.amtest90 /root]
  12. #which pwd
  13. /usr/bin/pwd
  14. [root@c43i08102.cloud.i09.amtest90 /root
  15. #which init
  16. /sbin/init
  17. [root@c43i08102.cloud.i09.amtest90 /root]
  18. #whereis init
  19. init: /usr/sbin/init /etc/init.d /usr/share/man/man1/init.1.gz

2,外部命令的执行--hash缓存表

系统的初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找命令(shell可以看作是工具箱(/usr/local/bin usr/ali/bin等),是通过$PATH变量在多个工具箱来寻找命令,并执行,找不到则报错),找到后会将命令记录到hash表中,当再次使用该命令时,shell解释器会首先查看hash表,存在即执行,不存在则取PATH路径寻找。

  1. [root@c43i08102.cloud.i09.amtest90 /root]
  2. #echo $PATH
  3. /usr/ali/bin:/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/opt/satools:/root/bin
  1. [root@c43i08102.cloud.i09.amtest90 /root]
  2. #hash #查看hash缓存
  3. hits command
  4. 1 /usr/bin/whereis
  5. [root@c43i08102.cloud.i09.amtest90 /root]
  6. #hash -l
  7. builtin hash -p /usr/bin/whereis whereis

2、查看shell

Shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中,可以使用 cat 命令查看它;

  1. ╭─root@localhost.localdomain ~
  2. ╰─➤ cat /etc/shells
  3. /bin/sh
  4. /bin/bash
  5. /sbin/nologin
  6. /usr/bin/sh
  7. /usr/bin/bash
  8. /usr/sbin/nologin
  9. /bin/zsh

查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量:

  1. ╭─root@localhost.localdomain ~
  2. ╰─➤ echo $SHELL
  3. /bin/zsh

3、执行shell脚本

执行shell脚本三种方法

source filename

source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

bash filename

bash filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。

./filename

./filename:当shell脚本具有可执行权限时,用bash filename与./filename执行脚本是没有区别的;./filename是因为当前目录没有在PATH中,所以”.”是用来表示当前目录的。

选项:-x 显示执行过程

实例:

  1. ╭─root@localhost.localdomain ~
  2. ╰─➤ bash -x back.sh
  3. ++ date '+\%F_\%T'
  4. + echo '50 23 * * 7 /usr/bin/tar -czf test_\2019-06-04_\08:21:40'

子shell和父shell

特点:子shell新建变量在父shell中不会生效

  1. ╭─root@localhost.localdomain ~
  2. ╰─➤ pstree
  3. systemd─┬─NetworkManager───2*[{NetworkManager}]
  4. ├─auditd───{auditd}
  5. ├─chronyd
  6. ├─crond
  7. ├─dbus-daemon
  8. ├─gssproxy───5*[{gssproxy}]
  9. ├─login───zsh
  10. ├─lvmetad
  11. ├─master─┬─pickup
  12. └─qmgr
  13. ├─polkitd───5*[{polkitd}]
  14. ├─rpcbind
  15. ├─rsyslogd───2*[{rsyslogd}]
  16. ├─sshd───sshd───zsh───pstree
  17. ├─systemd-journal
  18. ├─systemd-logind
  19. ├─systemd-udevd
  20. ├─tuned───4*[{tuned}]
  21. └─vmtoolsd───{vmtoolsd}
  22. ╭─root@localhost.localdomain ~
  23. ╰─➤ bash
  24. [root@localhost ~]# pstree
  25. systemd─┬─NetworkManager───2*[{NetworkManager}]
  26. ├─auditd───{auditd}
  27. ├─chronyd
  28. ├─crond
  29. ├─dbus-daemon
  30. ├─gssproxy───5*[{gssproxy}]
  31. ├─login───zsh
  32. ├─lvmetad
  33. ├─master─┬─pickup
  34. └─qmgr
  35. ├─polkitd───5*[{polkitd}]
  36. ├─rpcbind
  37. ├─rsyslogd───2*[{rsyslogd}]
  38. ├─sshd───sshd───zsh───bash───pstree
  39. ├─systemd-journal
  40. ├─systemd-logind
  41. ├─systemd-udevd
  42. ├─tuned───4*[{tuned}]
  43. └─vmtoolsd───{vmtoolsd}
  44. [root@localhost ~]# age=25
  45. [root@localhost ~]# echo $age
  46. 25
  47. [root@localhost ~]# exit
  48. exit
  49. ╭─root@localhost.localdomain ~
  50. ╰─➤ echo $age

4、shell约定

命名约定1:见名知意

命令约定2:以.sh 结尾

内容编写:

  1. #!/bin/bash #1. 声明shell解释器,是shell脚本的第一行,称为释伴(shebang)行。
  2. #2. 这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行
  3. echo "Hello World" #执行的command

脚本规范

  1. 第一行一般为调用使用的语言
  2. 程序名,避免更改文件名无法找到正确的文件
  3. 版本号
  4. 更改后的时间
  5. 作者相关信息
  6. 该程序的作用及注意事项
  7. 最后是更版本更新的简要说明

5、把shell放在后台运行方法

第一种方式:

  1. bash ken.sh &

第二种方式:

  1. nohup bash ken.sh &

shell(shell简介)的更多相关文章

  1. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  2. Linux Shell——bash shell 脚本简介

    bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash s ...

  3. shell编程简介

    前言 什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, ...

  4. 鸟哥的私房菜:Bash shell(一)-Bash shell功能简介

    Bash shell系列里,由变量谈起,先讲到环境变量的功能与修改的问题, 然后会继续提到历史指令的运用.接下来,就会谈一下『数据流重导向』这个重要概念, 最后就是管线命令的利用! 一  Bash s ...

  5. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  6. Linux - Shell - shell 执行方式

    概述 shell 的执行方式 背景 偶尔执行个 shell 脚本 一般都用 './script' 执行 最近忽然看到 有不同的执行方式, 感觉有必要整理一下, 然后和大家分享 准备 os centos ...

  7. 刷题记录:[De1ctf] shell shell shell

    目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...

  8. SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK

    SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...

  9. 我们一起来学Shell - shell的并发及并发控制

    文章目录 bash的并发 未使用并发的脚本 简单修改 使用wait命令 控制并发进程的数量 文件描述符 查看当前进程打开的文件 自定义当前进程用描述符号操作文件 管道 我们一起来学Shell - 初识 ...

  10. 我们一起来学Shell - shell的函数

    文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...

随机推荐

  1. 进程描述符(PCB)

    进程描述符(PCB) 概述 CPU作为计算机的核心部件,我们当然希望它能一直工作,充分提高它的使用效率.对于上层软件来说,我们不可能直接去操控CPU(我们没这能力也没必要),因为操作系统是夹在计算机硬 ...

  2. python 虾米停服了...用python爬取虾米最近播放的1000首歌

    1. 虾米关服 在这里插入图片描述 用了5年多的音乐软件就这么说关就关了,确实让人心里不好受 ,虽然再去一个新的app里,让它们的算法熟悉你的喜好也不是很困难,可我还是习惯虾米的界面.虾米现在可以支持 ...

  3. Javascript函数闭包及案例详解

    什么情况下会形成闭包,什么是闭包 闭包(Closure):函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员 下面来看一个 ...

  4. LeetCode 面试题16.18.模式匹配

    模式匹配 题目: 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串" ...

  5. Label_img&a

    绝对路径 相对路径 从根目录开始写 从引用的文件所在目录开始写 也可以作为链接提示 target = _blank 新窗口打开 = _self 默认值 本窗口打开 = _new 新窗口打开 = _pa ...

  6. .NET的并发编程(TPL编程)是什么?

    写在前面 优秀软件的一个关键特征就是具有并发性.过去的几十年,我们可以进行并发编程,但是难度很大.以前,并发性软件的编写.调试和维护都很难,这导致很多开发人员为图省事放弃了并发编程.新版 .NET 中 ...

  7. CentOS 6安装Gitlab

    1. 保证CentOS 6能连接网络 . 2.安装依赖: sudo yum install -y curl policycoreutils-python openssh-server cronie s ...

  8. 【JavaWeb】HTML&CSS 基础

    HTML&CSS 基础 HTML 基础 HTML 标签 HTML标题:HTML 标题(Heading)是通过 h1 - h6 等标签进行定义的. HTML段落: HTML 段落是通过 p 标签 ...

  9. 【SpringMVC】SpringMVC 响应数据

    SpringMVC 响应数据 文章源码 返回值分类 返回值是字符串 Controller 方法返回字符串可以指定逻辑视图的名称,通过视图解析器解析为物理视图的地址. @Controller @Requ ...

  10. 二进制格式 PLY 模型文件的读取与渲染

    PLY 文件头部信息: ply format binary_little_endian 1.0 comment VCGLIB generated element vertex 13469 proper ...