shell基本知识

news2024/10/2 10:39:50

为什么学习和使用Shell编程

什么是Shell

 shell的起源

shell的功能

 shell的分类

如何查看当前系统支持的shell?

如何查看当前系统默认shell?  

驼峰语句

shell脚本的基本元素

shell脚本编写规范 

 shell脚本的执行方式      

shell脚本的退出状态 (查看状态echo $?)

执行脚本的方法


为什么学习和使用Shell编程

对于一个合格的系统管理员来说,学习和掌握 Shell 编程是非常重要的。通过编程,可以在很大程度 上简化日常的维护工作,使得管理员从简单的重复劳动中解脱出来。
shell 程序的特点:
1 、简单易学
2 、解释性语言,不需要编译即可执行

什么是Shell

在学习 Shell 编程之前,必须弄清楚什么是 Shell 。为了能够使读者在学习具体的 Shell 编程之前对 Shell有个基本的了解,本节将对 Shell 进行概括性的介绍,包括 Shell 的起源和功能。

 shell的起源

1964 年,美国 AT&T 公司的贝尔实验室、麻省理工学院及美国通用电气公司共同参与开始研发一套 可以安装在大型主机上的多用户、多任务的操作系统,该操作系统的名称为Multics
1970 年,丹尼斯 里奇和汤普逊启动了另外一个新的多用户、多任务的操作系统的项目,他们把这 个项目称之为UNICS 。 1973年,使用 C 语言重新编写了 Unix 。通过这次编写,使得 Unix 得以移植到其他的小型机上面。 1979年,第一个重要的标准 UNIX Shell Unix 的第 7 版中推出,并以作者史蒂夫 伯恩( Stephen Bourne)的名字命名,叫做 Bourne Shell ,简称为 sh
20 世纪 70 年代末, C Shell 作为 2BSD UNIX 的一部分发布,简称 csh
之后又出现了许多其他的 Shell 程序,主要包括 Tenex C Shell tcsh )、 Korn Shell ksh )以及 GNU Bourne-Again shell( bash )。

shell的功能

Shell 又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于
Windows 操作系统中的命令行,但是, Shell 的功能远比命令行强大的多。在 UNIX 或者 localhost 中, Shell既是用户交互的界面,也是控制系统的脚本语言。

 shell的分类

Bourne Shell :标识为 sh ,该 Shell Steve Bourne 在贝尔实验室时编写。在许多 Unix 系统中,该 Shell是 root 用户的默认的 Shell 。 Bourne-Again Shell:标识为 bash ,该 Shell Brian Fox 1987 年编写,是绝大多数 localhost 发行 版的默认的Shell
Korn Shell :标识为 ksh ,该 Shell 由贝尔实验室的 David Korn 在二十世纪八十年代早期编写。它完 全向上兼容 Bourne Shell 并包含了 C Shell 的很多特性。 C Shell:标识为 csh ,该 Shell Bill Joy BSD 系统上开发。由于其语法类似于 C 语言,因此称为 C Shell。

如何查看当前系统支持的shell

[root@localhost ~] # cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

如何查看当前系统默认shell 

[root@localhost ~]# echo $SHELL

/bin/bash

驼峰语句

什么是驼峰语法?
骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时, 一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母 ,例如:
myFirstName myLastName ,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
除了驼峰命名法,另外还有匈牙利命名法。基本原则是:变量名 = 属性 + 类型 + 对象描述。匈牙利命
名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单 词或多个单词组合,该单词要指明变量的用途。比如m_lpszStr, 表示指向一个以 0 字符结尾的字符串的长 指针成员变量。 另外,有些程序员喜欢用下划线。比如file_name

shell脚本的基本元素

对于一个基本的 Shell 程序来说,应该拥有以下基本元素:
声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为
#!/bin/bash
2. 命令:可执行语句,实现程序的功能。
3. 注释:说明某些代码的功能,通过在代码中增加注释可以提高程序的可读性。
1 )单行注释: # 开头的一整行都是注释,例如:
#comment1
#comment2
#comment3
……
2 )多行注释,使用冒号 “:” 配合 here document 可实现多行注释,例如:
:<<BLOCK
…… 注释内容
BLOCK
4. 赋予 rx 的权限

shell脚本编写规范 

1 )脚本文件名应见名知意,例如 backup_mysql.sh
2 )文件开头指定脚本解释器 #!/bin/sh #!/bin/bash
3 )开头加版本特权等信息

# Date: 创建日期
# Author: 作者
# Mail: 联系方式
# Function: 功能
# Version: 版本
4 )脚本中尽量不要用中文注释
别吝啬添加注释,必要的注释方便自己别人理解脚本逻辑和功能;
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰;
单行注释,可以放在代码行的尾部或代码行的上部;
多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分。
5 )多使用内部命令
常用的内部命令有: echo eval exec export read shift exit

 shell脚本的执行方式      

1)bash ./filename.sh(产生子进程,再运行,使用当前指定的bash shell去运行)

2 ./filename.sh (产生子进程,再运行,使用脚本里面指定的 shell 去运行。使用该种方式执行需要 x 权限
3 source ./filename.sh source 命令是一个 shell 内部命令,其功能是读取指定的 shell 程序文件,并 且依次执行其中的所有的语句,并没有创建新的子shell 进程,所以脚本里面所有创建的变量都会保存到 当前的shell 里面)
4 . filename.sh (和 source 一样,也是使用当前进程执行)

shell脚本的退出状态 (查看状态echo $?)

UNIX 或者 Linux 中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为 0~255。通常情况下,成功的命令返回 0 ,而不成功的命令返回非 0 值。非 0 值通常都被解释成一个错误 码。行为良好的UNIX 命令,程序和工具都会返回 0 作为退出码来表示成功。
Shell 脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定 退出状态码。另外,用户也可以在脚本中使用exit 语句将指定的退出状态码传递给 Shell
[root@localhost ~] # vim ~/.vimrc
shell 脚本的执行方式
1 )交互式执行
2 )作为程序文件执行(常用)
对于一组需要经常重复执行的 Shell 语句来说,将它们保存在一个文件中来执行。我们通常称这种包 含多个Shell 语句的文件为 Shell 脚本,或者 Shell 脚本文件。脚本文件是普通的文本文件,可使用任何的 文本编辑器查看或修改Shell 脚本。

执行脚本的方法

1 bash ./filename.sh (产生子进程,再运行,使用当前指定的 bash shell 去运行)
2 ./filename.sh (产生子进程,再运行,使用脚本里面指定的 shell 去运行。使用该种方式执行需要 x
权限)
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
if expand( "%:e" ) == 'sh'
call setline(1, "#!/bin/bash" )
call setline(2, "#########################" )
call setline(3, "#File name:" .expand( "%" ))
call setline(4, "#Version:v1.0" )
call setline(5, "#Email:admin@test.com" )
call setline(6, "#Created time:" .strftime( "%F %T" ))
call setline(7, "#Description:" )
call setline(8, "#########################" )
call setline(9, "" )
endif
endfunc

 创建一个shell文件如图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/397697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数位dp-- 数字游戏

题目 思路 也是一道比较典型的数位dp的问题&#xff0c;关键的思想跟我上一篇博客很像&#xff0c; 首先把区间值变成[1,Y]-[1,X-1]的值&#xff0c;然后单独计算得到结果。 总的来说就是把这个数的每一位都单独拿出来&#xff0c;然后根据选0-an-1和选**an**两种方案单独计算&…

LeetCode 热题 C++ 538. 把二叉搜索树转换为累加树 543. 二叉树的直径 560. 和为 K 的子数组

538. 把二叉搜索树转换为累加树 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下&#xff0c;二…

Java基础算法题

目录 练习一 : 优化代码 扩展 : CRTL Alt M 自动抽取方法 练习二: 方法1: 方法2: 方法3: Math : 顾名思义&#xff0c;Math类就是用来进行数学计算的&#xff0c;它提供了大量的静态方法来便于我们实现数学计算&#xff1a; 练习三 : 练习四 : 练习五: 练习…

【GO】K8s 管理系统项目34[Docker方式–应用部署]

K8s 管理系统项目[Docker方式–应用部署] 1. 数据库 1.1 创建数据库目录 mkdir -p /data/mysql5.7/1.2 创建容器 docker run --name mysql -itd -h mysql-server -e MYSQL_ROOT_PASSWORDroot -v /data/mysql5.7:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 …

layui框架实战案例(19):layui-table模块表格综合应用(筛选查询、导入导出、群发短信、一键审核、照片展示、隐私加密)

系列文章目录 layui动态表格翻页和搜索的代码分析layui框架实战案例(3)&#xff1a;layui上传错误请求上传接口出现异常解决方案layui框架实战案例(9)&#xff1a;layPage 静态数据分页组件layui框架实战案例(10)&#xff1a;短信验证码60秒倒计时layui框架实战案例(11)&#…

《实践论》笔记及当下反思(二)

目录 笔记 1、马克思主义所说的绝对真理是什么&#xff1f; 2、客观现实世界的变化运动永远没有完结&#xff0c;人们在实践中对于真理的认识也就永远没有完结 3、改造客观世界&#xff0c;也改造自己的主观世界-——改造自己的认识能力 4、实践、认识、再实践、再认识&…

ARP报文内容详细分析

ARP报文格式如图&#xff1a; 字段1&#xff1a;ARP请求的目的以太网地址&#xff0c;全1时&#xff0c;代表广播地址。 字段2&#xff1a;发送ARP请求的以太网地址。 字段3&#xff1a;以太网帧类型表示后面的数据类型&#xff0c;ARP请求和ARP应答此字段为&#xff1a;0x0806…

SourceTree 重置提交、合并、撤销、回滚

SourceTree重置当前分支到此次提交使用场景&#xff1a;已提交未推送的修改撤销、想把某一次的错误修改全部撤销当前发布代码有bug需要切到上次提交发布版本Git中的HEAD解释# 使用最新一次提交重制暂存区git reset HEAD -- filename# 使用最新一次提交重制暂存区和工作区git re…

SpringBoot——统一功能处理

处理登陆拦截 上一片博客中讲到SpringAOP可以对页面进行拦截&#xff0c;我们可以用SpringAOP实现对登陆的拦截 但是由于拦截需要HttpSession对象&#xff0c;并且之后还需要页面重定向&#xff0c;因此在实际应用中&#xff0c;并不用SpringAOP进行登陆拦截&#xff0c;而是…

HBase---idea操作Hbase数据库并且映射到Hive

idea操作Hbase数据库并且映射到Hive 文章目录idea操作Hbase数据库并且映射到Hiveidea操作Hbase数据库环境准备启动服务创建Maven工程在测试类中编写初始化方法在测试类中编写关闭方法在测试类中编写创建命名空间方法在测试类中编写创建表方法在测试类中编写查看表结构方法在测试…

tmall.product.match.schema.get( 获取匹配产品规则 )

&#xffe5;免费必须用户授权 ISV发布商品前&#xff0c;需要先查找到产品ID&#xff0c;这个接口返回查找产品规则入参规则 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 点击获取key和secret 请求示例 TaobaoClient …

ORACLE SQL格式化小数点

ORACLE SQL格式化小数点 select CONCAT(TO_CHAR(0.00100,‘990.999’),‘%’) as a0 , CONCAT(TO_CHAR(1100,‘990.999’),‘%’) as a1 , CONCAT(TO_CHAR(0.236100,‘990.999’),‘%’) as a2 , CONCAT(TO_CHAR(0.0200100,‘990.999’),‘%’) as a3 , CONCAT(TO_CHAR(1.0310…

状态机的Go语言实现版本

一、状态机 1. 定义 有限状态机&#xff08;Finite-state machine, FSM&#xff09;&#xff0c;简称状态机&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 2. 组成要素 现态&#xff08;src state&#xff09;&#xff1a;事务当前所处的状…

Java程序中空指针异常的最佳实践

1、空指针问题 NullPointerException 是 Java 代码中最常见的异常&#xff0c;将其最可能出现的场景归为以下 5 种&#xff1a; 参数值是 Integer 等包装类型&#xff0c;使用时因为自动拆箱出现了空指针异常&#xff1b;字符串比较出现空指针异常&#xff1b;诸如 Concurren…

新建vite+vue3+ts项目,以及解决过程中遇到的问题

目录 一、新建vitevue3ts项目 二、解决过程中遇到的问题 解决报错&#xff1a;Module ‘“xx.vue“‘ has no default export. 解决报错&#xff1a;Error [ERR_MODULE_NOT_FOUND]: Cannot find package ‘uuid’ imported from xxx的解决 解决报错&#xff1a;[plugin:vi…

如何选择一款数据库?

1主流数据库技术介绍常见的数据库模型主要分为SQL关系型数据库和NoSQL非关系型数据库。其中关系型数据库分为传统关系数据库和大数据数据库&#xff0c;非关系型数据库分为键值存储数据库、列存储数据库、面向文档数据库、图形数据库、时序数据库、搜索引擎存储数据库及其他&am…

Java集合类

在了解Java集合类之前&#xff0c;我们必须首先了解java.util包&#xff0c;这个包提供了所有集合相关的接口和类。 集合是用来存储数据类型的一种数据结构&#xff0c;提到存储数据类型的数据结构我们最先想到的应该是数组&#xff0c;接下来我们简单回顾下Java中集合和数组的…

Xilinx ZYNQ 7000 HDMI

High-Definition Multimedia Interface (HDMI) 参考xilinx application note XAPP460 HDMI来自High-Definition Multimedia Interface 高分辨率多媒体接口&#xff0c;多媒体一般包含图像和声音。 Transition Minimized Differential Signaling (TMDS) 是HDMI的物理层。 TMDS…

春招冲刺(十一):前端面试之网络总结

网络总结 Q1: GET和POST的请求的区别 应用场景&#xff1a;Get是一个幂等请求&#xff0c;一般用于请求资源。post不是幂等请求&#xff0c;一般用于修改资源。缓存&#xff1a;Get请求一般缓存&#xff0c;Post一般不缓存报文格式&#xff1a;Get请求体一般为空&#xff0c;…

【Linux】linux | 修改dns | 修改网卡dns

一、说明1、业务需要&#xff0c;需要修改服务的dns的地址2、改成阿里的二、操作查询需要修改dns的网卡ifconfig说明1&#xff1a; 留意ens192&#xff0c;即网卡名称查看网卡配置文件信息cd /etc/sysconfig/network-scripts ll备份cp /etc/sysconfig/network-scripts/ifcfg-en…