Shell-程序员宅基地

技术标签: Shell 编程  bash  centos  

Shell

shell —— 壳,保护内核

Shell 作用

  • 完成用户和内核之间的信息交换 —— 翻译工具,命令解释器

Shell 即命令解释器

  • Shell 是系统提供给用户的操作界面,提供了用户与内核进行交互操作的一种接口,它解释由用户输入的命令并且把它们送到内核执行任务
  • 不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 Shell 命令组成的程序
  • Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支、控制结构等,用这种编程语言编写的 Shell 程序与其它应用程序具有同样的效果

注:不同系统有不同的命令解释器,同一个系统命令解释器也有不同版本

补充说明

  • Shell 有自己的语法结构,Shell 解释的命令实际就是一些符合 Shell 编程语言的程序

程序和进程的区别

  • 程序是一段可以实现某一功能的代码,进程是这段代码运行的过程
  • 程序是静态的文件状态、进程是这段程序运行的过程 —— 由命令解释器运行程序,将程序变成进程

编程语言 —— shell 是一种面向底层操作系统的编程语言

  • Shell 语言、C、PHP、Python、Java、、、—— 有计算能力、流程控制

注:html 是一种语法,严格意义来说不具备编程语言的特征,主要是网页的样式设计

系统的包含关系 —— 硬件 --》内核 --》shell 解析器 --》应用程序

  • 内核建立在硬件的 CPU 以及内存的基础上运行,CPU 由运算器和控制器组成 —— 冯诺依曼
  • 内核在运行过程中,所执行的任务由命令或应用程序来控制,而命令的转换过程由 shell 完成 —— 解释命令

学习 Shell 脚本的目的

  1. 减少用户手动执行命令而产生的错误
  2. 减少重复性工作,让脚本来替管理员来完成重复性工作,提高效率 —— 编写脚本自动工作

简化重复操作,降低出错概率,是服务器管理的一大助力 —— 脚本

Shell 类型

查看当前系统兼容的 shell 类型 —— /etc/shells

  • cat /etc/shells —— 查看当前系统兼容的,能识别的解释器类型
    • /bin/sh --》/usr/bin/sh
    • /bin/bash --》/usr/bin/bash
    • /bin/tcsh、/bin/csh

注:/etc/shells 是系统所识别 shell 类型的配置文件,可以在其中添加或删除 shell 类型

说明

  • /bin/sh 是 /bin/bash 的前身:为了兼容之前的版本,所以 sh 的 shell 类型依然存在
  • /usr/bin/ 和 /bin/ 是同一个目录 —— 软链接
  • /bin/tcsh 和 /bin/csh:操作系统一般使用 C 语言开发,Linux 内核是 C 语言写的,所以对 C 支持

注:软链接后加上 “/” 后 “ls -l” 命令会显示软链接的对应原文件的信息,删掉结尾的 “/” 或者直接在软链接所在目录使用 “ls -l” 即可查看它是软链接

注:目录是不允许由用户创建硬链接的,但实际上 Linux 支持目录创建硬链接,每个目录自带的 “.” 和 “…” 就是硬链接,代表当前目录和上级目录 —— Linux 操作系统的一个保护机制

用户登录 shell 类型

  • /bin/bash
  • /sbin/nologin —— 特殊的解释器,是配置文件中可以后续增加的解释器选项

说明

  • /etc/shells 是 Linux 可以支持识别哪些命令解释器的配置文件,可以进行编辑
  • 在 /etc/shells 中添加 /sbin/nologin 后,系统就可以识别、调用 /sbin/nologin,完成一些工作和任务

Shell 类型的分类

Shell 类型 易学性 可以执行 编辑性 快捷性
Bourne shell(sh) 容易 较差 较差
Bourne Again shell(bash) 较好
C shell(csh) 较难 较好 较好
TC shell(tcsh)

Bash Shell 说明

  • Linux 中 shell 有多种类型,其中最常用的几种是 Bourne shell 系列和 C shell 系列
  • Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用
    • Bourne shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做的不如其它几种 shell
  • Linux 操作系统默认的 shell 是 Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash
    • 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加、增强了很多特性
  • Bash 放在 /bin/bash 中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能
    • 它还包含了很多 C shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面

bash shell 提供的功能 —— 提供了哪些便捷功能

  1. history,历史命令记录,这是 bash shell 解释器提供的命令记录功能,历史命令保存在指定配置文件中
  2. alias,别名,命令别名,实现将某些命令简化或把命令和选项进行结合、转义等功能
  3. tab,命令和目录的自动补全功能、、、

两种 Shell 脚本执行方式

  1. 添加执行权限:chmod +x *.sh —— 被动模式
    • 给予可以执行权限,执行时再找到解释器执行
    • 编写脚本的开头需要声明解释器类型:#!/bin/bash
  2. 使用解释器加载脚本:bash *.sh —— 主动执行
    • bash 就是命令,使用命令将脚本中的代码加载到解释器中执行

注:使用 bash 可以主动加载没有 x 权限的脚本 —— 测试

Shell 脚本

Shell 中使用的工具 —— echo 命令

Shell 脚本的本质

  • 可以将由人手动管理服务的过程变成程序自动执行
    • 比如每次新装的操作系统都要重复进行的操作:yum 源配置、ip 地址设置、、、
  • 将平时执行的命令罗列到脚本中,辅以一些自动化功能

echo 命令

  • 格式:echo [选项] [输出内容]
    • -e —— 支持反斜线控制的字符转换(转义字符)
    • -n —— 取消输出后行尾的换行符号

例:编辑 vim hello.sh --》#!/bin/bash、echo “hello world” --》然后执行 bash hello.sh

#!/bin/bash
echo "hello world"				# bash hello.sh --》hello world

echo -e 选项支持的特殊符号

  • \a —— 输出警告音(声音的输出)
  • \b —— 退格
  • \c —— 取消输出行末的换行符,和 “-n” 选项功能一致
  • \e —— ESCAPE 键
  • \f —— 换页符
  • \n —— 换行
  • \r —— 回车键
  • \t —— 制表符,tab
  • \v —— 垂直制表符
  • \0nnn —— 按照八进制 ASCII 码表输出字符。其中 0 为数字零,nnn 是三位八进制数
  • \xhh —— 按照十六进制 ASCII 码表输出字符。其中 hh 是两位十六进制数

注:0 开头的数字表示八进制数,chmod 00755 file —— 第一个 0 表示八进制,第二个 0 表示取消特殊权限

例:将字符 “abcdef” 六个字符以两行三列输出,中间用制表符

echo -e "a\tb\tc\nd\te\tf				# 两行三列,制表输出
a	b	c
d	e	f

注:“\n” 和 \t 表示转义字符,代表换行和 tab,注意一定要加 -e 选项才支持识别 “\” 的字符转义功能

补充:

  • \\ —— 输出 “\” 字符 —— “\” 作为特殊符号的功能是强制换行

如:find 命令最后的选项 -exec {} ; —— “\” 作用是取消命令的别名

如:rm 命令存在 “rm -i” 的别名,\rm —— “\” 会注释掉 rm 的别名,使用命令本身的含义执行

echo 显示颜色

  • 格式:“\e[m” 代表颜色输入开始,“\e[m” 代表颜色输入结束
  • 文字颜色:
    • 30 = 黑色、31 = 红色、32 = 绿色、33 = 黄色、34 = 蓝色、35 = 紫色、36 = 天蓝、37 = 白色、39 = 结束
  • 底纹颜色:
    • 40 = 黑色、41 = 红色、42 = 绿色、43 = 黄色、44 = 蓝色、45 = 紫色、46 = 天蓝、47 = 白色、49 = 结束

echo 特殊的显示

  • \e[0m —— 关闭所有属性
  • \e[1m —— 设置高亮度
  • \e[4m —— 下划线
  • \e[5m —— 闪烁
  • \e[7m —— 反显
  • \e[8m —— 消隐

例1:输出字符 “hello world” 并设置输出字符颜色为红色

echo -e "\e[31mhello world\e[0m"	#\e[0m 表示结束所有的颜色或格式输出

例2:输出字符 “hello world” ,设置字符高亮显示,且颜色为红

echo -e "\e[31;1mhello world\e[0m"	#特殊的显示,结合显示颜色

注:多个条件之间用分号 “;” 分割,可以同时生效

创建一个合格的 shell 脚本

[root@localhost ~]# vim hello.sh
#!/bin/bash
#This is my first piece of code
#Author(Email):[email protected]

echo "We will print hello world of 7 colors."
echo -e "\e[30;1mhello world\e[0m"
echo -e "\e[31;1mhello world\e[0m"
echo -e "\e[32;1mhello world\e[0m"
echo -e "\e[33;1mhello world\e[0m"
echo -e "\e[34;1mhello world\e[0m"
echo -e "\e[35;1mhello world\e[0m"
echo -e "\e[36;1mhello world\e[0m"

注:vim hello.sh —— .sh 是命名规范,可写可不写,但 vim 会以后缀名识别脚本格式,显示字符串高亮

执行 shell 脚本 —— 两种方式

  1. 添加 x 执行权限(相对或绝对路径执行)

    [root@localhost ~]# chmod +x hello.sh
    [root@localhost ~]# ./hello.sh
    
  2. 用 bash 命令,调用脚本文件

    [root@localhost ~]# bash hello.sh
    

说明:执行一个脚本只有以上两种方式,主动通过 bash 命令执行,或者添加权限通过脚本声明的 shell 执行

补充:. hello.sh 或 source hello.sh 会将脚本加载到当前 shell 执行 —— 可加载配置文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_57803307/article/details/136436274

智能推荐

探索T-Writer.js:一款强大的Web文本编辑器-程序员宅基地

文章浏览阅读320次,点赞3次,收藏6次。探索T-Writer.js:一款强大的Web文本编辑器项目地址:https://gitcode.com/ChrisCavs/t-writer.jsT-Writer.js 是一个基于JavaScript的开源富文本编辑器,旨在提供一种简洁、高效的在线写作体验。它具备现代Web应用所需的多种功能,并且易于集成到你的网站或应用中。技术分析T-Writer.js 使用了最新的Web技术栈,包括:...

[PHP]学生成绩管理系统_php成绩管理系统-程序员宅基地

文章浏览阅读1w次,点赞27次,收藏175次。[PHP]学生成绩管理系统其实,这是我大一的时候,数据库的课程设计,虽然现在回看也觉得代码凌乱,但也懒得改了,之前是发在了自己搭建的博客,现在发到CSDN上来。文章目录[PHP]学生成绩管理系统1 前言2 功能模块2.1学生模块2.2 教师模块2.3 主要的文件结构3 界面设计3.1 登录界面3.2 学生主页(我的成绩)3.3 各科成绩3.4 教师主页(学生管理)3.5 学生信息详情3.6 学生信息修改3.7 添加学生信息3.8 课程管理3.9 各科成绩3.10 一键管理4 数据库设计4.1 E-R图4_php成绩管理系统

基于ssm超市库存商品管理系统的设计与实现(源码+lw+部署文档+讲解等)-程序员宅基地

文章浏览阅读775次,点赞22次,收藏24次。功能对照表的目的是帮助开发团队了解软件的功能状况,及时修复功能缺陷和错误,并提高软件的质量和稳定性。功能编号功能名称功能描述功能状态备注1用户登录用户可以通过提供用户名和密码登录系统正常用户名和密码的验证机制安全性2用户注册用户可以通过提供用户名、密码和电子邮件地址注册新的账户正常无3密码修改用户可以通过提供原密码和新密码修改已有账户的密码正常用户密码的修改操作是否需要提供安全认证4用户信息查看用户可以查看自己的个人信息,如用户名、电子邮件地址、角色等正常无。

阿里云PAI大模型RAG对话系统最佳实践_rag最佳实践-程序员宅基地

文章浏览阅读745次,点赞12次,收藏21次。通过以上更具体的步骤和考虑因素,_rag最佳实践

python如何另存文件_python如何保存文本文件-程序员宅基地

文章浏览阅读3.1k次。python保存文本文件的方法:使用python内置的open()类可以打开文本文件,向文件里面写入数据可以用write()函数,写完之后,使用close()函数就可以关闭并保存文本文件了示例代码如下:执行结果如下:内容扩展:Python3将数据保存为txt文件的方法,具体内容如下所示:f = open("data/model_Weight.txt",'a') #若文件不存在,系统自动创建。'a'..._怎么保存python文件

Linux下打包qt和oracle,怎样编译Qt下的Oracle驱动-程序员宅基地

文章浏览阅读196次。Windows下编译Oracle驱动打开工程:C:\Qt\4.8.1\src\plugins\sqldrivers\oci修改oci.pro:TARGET = qsqlociSOURCES = main.cppinclude(../../../sql/drivers/oci/qsql_oci.pri)include(../qsqldriverbase.pri)INCLUDEPATH += D:\o..._linux 编译 oci.pro

随便推点

vue中的js文件如何使用i18n 国际化_vue中i18n.js文件中如何调用解决,并将结果赋值给i1 8n的message-程序员宅基地

文章浏览阅读5.8k次,点赞2次,收藏6次。1.在main.js文件中引入:方式1://main.jsimport VueI18n from 'vue-i18n'Vue.use(VueI18n) // 通过插件的形式挂载,通过全局方法 Vue.use() 使用插件const i18n = new VueI18n({ locale: 'zh', // 语言标识 //this.$i18n.locale // 通过切换loca..._vue中i18n.js文件中如何调用解决,并将结果赋值给i1 8n的message

linux驱动开发:ft5x06的touch screen的IIC驱动程序编写_触摸屏a类协议和b类协议-程序员宅基地

文章浏览阅读2.8k次。触摸屏属于一个标注的input dev.所以我们按照输入子系统的流程来实现驱动开发。 实际板子与CTPM的通讯连接基于IIC总线,所以我们需要把驱动挂载到IIC总线下面去,也就是注册IIC驱动到iic_core.c中去。 实例化一个IIC设备有多种方式,仿照上一次的24cxx IIC设备的创建,我们来实现ft5x06IIC设备的创建。 因实际板子上TS IC使用的是ft5x02,所以先实例化设_触摸屏a类协议和b类协议

关于html中下拉菜单select的样式的改变_html设置select选择显示和下来显示怎么能不一致-程序员宅基地

文章浏览阅读5.2k次。关于html中下拉菜单select的样式的改变作者:菩提树下的杨过 日期:2006-06-12字体大小: 小 中 大 首先要告诉大家,如果你是用css的方法,除了箭头部分,其他都可以改变,这是很令人别扭的事,因为其他的样式改了,箭头部分改不了等于无用。下面举个css改select的例子 HTML代码 .box{border:1px solid#C0C0_html设置select选择显示和下来显示怎么能不一致

ZedBoard-自定义IP核实现+PS成功调用【详细步骤+流程介绍+源码】_zedboard教程-程序员宅基地

文章浏览阅读3.4k次。软件环境:WIN7_64 + ISE 14.4 (system_edition)硬件:Zedboard、USB-Cable线搭建图: 经过前几天的学习,查看数据手册、官方例程,笔者已经对Zedboard有了基本的了解,但是怎样才能充分发挥ZYNQ的优势呢?这个就不得不说下ZYNQ的基本架构了,它分为PS(Processing System)和PL(Progr_zedboard教程

使用H2O机器学习"十分钟"提交天池练习赛--工业蒸汽量预测,超过86%的队伍_练习赛-蒸汽数据集-程序员宅基地

文章浏览阅读430次。试用一下H2O全自动机器学习下载数据集天池练习赛"工业蒸汽量预测",下个数据集:https://tianchi.aliyun.com/competition/entrance/231693/introduction安装H2OH2O requirements:pip install requestspip install tabulatepip install ..._练习赛-蒸汽数据集

VxLAN-分布式网关_vxlan分布式网关实验-程序员宅基地

文章浏览阅读603次。vLSW1、vLSW2充当虚拟交换机,给数据添加vlan tag。由于模拟器PC不会主动发送ARP,需要用PC ping 网关地址。查看VPN实例中的路由,学习到32位主机路由。查看OSPF邻居是否建立,路由是否学习到。CE1上学习到32位主机路由(回城路由)查看BGP EVPN学习的5类路由。测试PC访问外部网络Server。查看BGP EVPN邻居关系。同子网,PC1 访问PC2。跨子网,PC1 访问PC3。查看EVPN的3类路由。查看EVPN的2类路由。查看3层VxLan隧道。查看VPN实例内路由。_vxlan分布式网关实验

推荐文章

热门文章

相关标签