shell(shell简介)
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
脚本规范
- 第一行一般为调用使用的语言
- 程序名,避免更改文件名无法找到正确的文件
- 版本号
- 更改后的时间
- 作者相关信息
- 该程序的作用及注意事项
- 最后是更版本更新的简要说明
5、把shell放在后台运行方法
第一种方式:
bash ken.sh &
第二种方式:
nohup bash ken.sh &

shell(shell简介)的更多相关文章
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- Linux Shell——bash shell 脚本简介
bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash s ...
- shell编程简介
前言 什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, ...
- 鸟哥的私房菜:Bash shell(一)-Bash shell功能简介
Bash shell系列里,由变量谈起,先讲到环境变量的功能与修改的问题, 然后会继续提到历史指令的运用.接下来,就会谈一下『数据流重导向』这个重要概念, 最后就是管线命令的利用! 一 Bash s ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- Linux - Shell - shell 执行方式
概述 shell 的执行方式 背景 偶尔执行个 shell 脚本 一般都用 './script' 执行 最近忽然看到 有不同的执行方式, 感觉有必要整理一下, 然后和大家分享 准备 os centos ...
- 刷题记录:[De1ctf] shell shell shell
目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...
- SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK
SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...
- 我们一起来学Shell - shell的并发及并发控制
文章目录 bash的并发 未使用并发的脚本 简单修改 使用wait命令 控制并发进程的数量 文件描述符 查看当前进程打开的文件 自定义当前进程用描述符号操作文件 管道 我们一起来学Shell - 初识 ...
- 我们一起来学Shell - shell的函数
文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...
随机推荐
- JVM内存模型总结,有各版本JDK对比、有元空间OOM监控案例、有Java版虚拟机,综合实践学习!
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
- HotSpot学习(二):虚拟机的启动过程源码解析
1. 前言 上文介绍了HotSpot编译和调试的方法,而这篇文章将迈出正式调试的第一步--调试HotSpot的启动过程. 学习启动过程可以帮助我们了解程序的入口,并对虚拟机的运行有个整体的把握,方便日 ...
- 使用ImmutableMap简化语句
项目实战 最近接了一个出行权益的需求,回调的状态有十几种,需要转换为进行中,取消,已完成几种状态进行订单状态的展示,使用ImmutableMap可以简化语句,替代使用if-else 语句或者switc ...
- 如何优雅的传递 stl 容器作为函数参数来实现元素插入和遍历?
问题背景 开始正文之前,做一些背景铺垫,方便读者了解我的工程需求.我的项目是一个客户端消息分发中心,在连接上消息后台后,后台会不定时的给我推送一些消息,我再将它们转发给本机的其它桌面产品去做显示.后台 ...
- 机器学习1-sklearn&字典特征抽取
sklearn数据集 数据集API介绍 sklearn.datasets 加载获取流行数据集 datasets.load_*() 获取小规模数据集,数据包含在datasets里 datasets.fe ...
- Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Jav ...
- MySQL select 查询的分页和排序
SELECT 语法 SELECT [ALL | DISTINCT] {* | table.* | [table.field1[as alias1][,table.field2[as alias2]][ ...
- 【System】进程,线程和任务之间的区别是什么?
任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动.一个任务既可以是一个进程,也可以是一个线程.简而言之,它指的是一系列共同达到某一目的的操作.例如,读取数据并将数据放入内存中.这 ...
- Databricks 第7篇:管理Secret
有时,访问数据要求您通过JDBC对外部数据源进行身份验证,可以使用Azure Databricks Secret来存储凭据,并在notebook和job中引用它们,而不是直接在notebook中输入凭 ...
- Jmeter(三十六) - 从入门到精通进阶篇 - 设置负载阶梯式压测场景(详解教程)
1.简介 在性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间,然后继续加压达到某个值持续运行,如此循环直到达到预期的峰值,运行一 ...