1、shell 简介

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

下面是流程示意图:

2,Linux执行命令

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

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

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

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

例子

[root@c43i08102.cloud.i09.amtest90 /root]
#type pwd
pwd is a shell builtin
[root@c43i08102.cloud.i09.amtest90 /root]
#type -a pwd
pwd is a shell builtin
pwd is /usr/bin/pwd
[root@c43i08102.cloud.i09.amtest90 /root]
#type init
init is /sbin/init
[root@c43i08102.cloud.i09.amtest90 /root]
#which pwd
/usr/bin/pwd
[root@c43i08102.cloud.i09.amtest90 /root
#which init
/sbin/init
[root@c43i08102.cloud.i09.amtest90 /root]
#whereis init
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路径寻找。

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

2、查看shell

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

╭─root@localhost.localdomain ~
╰─➤ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/zsh

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

╭─root@localhost.localdomain ~
╰─➤ echo $SHELL
/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 显示执行过程

实例:

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

子shell和父shell

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

╭─root@localhost.localdomain ~
╰─➤ pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─gssproxy───5*[{gssproxy}]
├─login───zsh
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───zsh───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
╭─root@localhost.localdomain ~
╰─➤ bash
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─gssproxy───5*[{gssproxy}]
├─login───zsh
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───zsh───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@localhost ~]# age=25
[root@localhost ~]# echo $age
25
[root@localhost ~]# exit
exit
╭─root@localhost.localdomain ~
╰─➤ echo $age

4、shell约定

命名约定1:见名知意

命令约定2:以.sh 结尾

内容编写:

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

脚本规范

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

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

第一种方式:

bash ken.sh &

第二种方式:

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. TurtleBot3使用课程-第四节(北京智能佳)

    目录 1.机器学习 2 1.1 机器学习一 2 1.1.1 目标 2 1.1.2 操作环境 2 1.1.3 设置 2 1.1.4运行(它需要超过几秒取决于PC) 3 1.1.5运行屏幕 3 1.1.6 ...

  2. 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库

    引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...

  3. shell实现99乘法表

    #!/usr/bin/env sh for ((x=1;x<10;x++));do for ((y=1;x>=y;y++));do printf "${y}x${x}=$(exp ...

  4. 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..

    1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...

  5. 【原创】X86_64汇编、寄存器、内嵌汇编

    整理的X86_64/X86汇编.寄存器.C内嵌汇编笔记,主要用于查阅使用. 目录 一.汇编语言 二.指令 数据传输指令 栈操作指令 push pop 运算指令 位操作 比较操作指令 标志寄存器 流控制 ...

  6. Rabbitmq可靠消息投递,消息确认机制

    前言 我们知道,消息从发送到签收的整个过程是 Producer-->Broker/Exchange-->Broker/Queue-->Consumer,因此如果只是要保证消息的可靠投 ...

  7. kubernets之计算资源

    一  为pod分配cpu,内存以及其他的资源 1.1  创建一个pod,同时为这个pod分配内存以及cpu的资源请求量 apiVersion: v1 kind: Pod metadata: name: ...

  8. Oracle备份审计表SYS.AUD$和SYS.FGA_LOG$

    ORACLE的审计表不可以使用expdp和impdp导出和导入,如果使用,会报如下错误: 需要使用exp和imp进行导出和导出 导出语句: exp " '/ as sysdba' " ...

  9. linux系统图形化管理工具

    webmin是一个非常好的图形化管理工具,提供了系统管理员对于linux系统的运维效率.对于那些记不住命令,新入门的新手真的是一个很好的工具呀,上图吧. 这是系统管理的首页,可以看到,CPU,内存.虚 ...

  10. Windows10下Canvas对象获得屏幕坐标不正确的原因排查与处理

    因为Canvas没有直接将画布内容保存为图片的方法,所以很多时候是通过获得Canvas画布的坐标,然后通过截图的方式来将画布内容保存为本地图片. 如何取得Canvas画布的坐标呢,比较简单实用的方式如 ...