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 ...
随机推荐
- pydub "Couldn't find ffmpeg or avconv - defaulting to ffmpeg" 问题解决
我通过 命令行安装了pydub库,运行报了如下错误 RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but ...
- 数据库索引的基石----B树
数据结构相对来说比较枯燥, 我尽量用最易懂的话,来把B树讲清楚.学过数据结构的人都接触过一个概念二叉树,简单来说,就是每个父节点最多有两个子节点.为了在二叉树上更快的进行元素的查找,人们通过不断的改进 ...
- HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验 硬件平台 基于正点原子战舰V3开发板 MCU:STM32F103ZET6 片上SRAM大小:64KBytes 片上FLASH大小 ...
- Hbase性能调优(二)
一.HBase关键参数配置指导 如果同时存在读和写的操作,这两种操作的性能会相互影响.如果写入导致的flush和Compaction操作频繁发生,会占用大量的磁盘IO操作,从而影响读取的性能.如果写入 ...
- spark-streaming获取kafka数据的两种方式
简单理解为:Receiver方式是通过zookeeper来连接kafka队列,Direct方式是直接连接到kafka的节点上获取数据 一.Receiver方式: 使用kafka的高层次Consumer ...
- 微信小程序--投票小程序设计与实现(图片、视频发布、分组、审核、排名)
投票微信小程序设计与实现(图片.视频发布.分组.审核.排名) 之前接到一个需求,设计一个类似H5 投票系统之类的小程序,我绞尽脑汁,冥思苦想,最后终于做了出来. 再次感谢 @文晓港 的ColorU ...
- 风炫安全Web安全学习第十节课 数字型的Sql注入
数字型的Sql注入 风炫安全Web安全学习第十一节课 字符型和搜索型的sql注入 风炫安全Web安全学习第十二节课 mysql报错函数注入 风炫安全Web安全学习第十三节课 CUD类型的sql注入 风 ...
- 借助window.performance实现基本的前端基础性能监控日志
借助window.performance实现基本的前端基础性能监控日志并二次重写console方法方便日常前端console日志的调试 npm install sn-console
- Openstack Keystone 认证服务(四)
Openstack Keystone 认证服务(四) keystone 的安装完全依赖ocata的源, 如果没有建议自己搭建. 否则用的源不对会产生各种奇葩问题. 创建keystone库和用户: ## ...
- linux最大打开文件句柄数
linux最大打开文件句柄数,即打开文件数最大限制,就是规定的单个进程能够打开的最大文件句柄数量(Socket连接也算在里面,默认大小1024) liunx中文件句柄有两个限制,一种是用户级的,一种是 ...