Shell编程入门

news2024/9/29 9:37:09

Shell编程入门

  • 一、Shell概述
    • 1.1 Shell的作用
    • 1.2 Linux提供的Shell解释器
    • 1.3 Centos默认的解析器是bash
  • 二、Shell脚本入门案例
  • 三、变量
    • 3.1 系统变量
    • 3.2 自定义变量
    • 3.3 特殊变量
  • 四、运算符
  • 五、条件判断
    • 5.1 基本语法
    • 5.2 常用判断条件
    • 5.3 多条件判断
  • 六、流程控制
    • 6.1 if语句
    • 6.2 case语句
    • 6.3 for循环
    • 6.4 while循环
  • 七、read读取控制台输入
  • 八、函数
    • 8.1 系统函数
    • 8.2 自定义函数
  • 九、正则表达式入门
    • 9.1 是什么
    • 9.1 常规匹配
    • 9.2 常用特殊字符

一、Shell概述

1.1 Shell的作用

  • Shell是一个基于Linux内核和应用程序之间的一个命令行解释器 它接收应用程序/用户命令 然后调用操作系统内核 由操作系统指挥硬件完成工作
  • Shell还是一个功能相当强大的编程语言(脚本语言),易编写、易调试、灵活性强。
  • Shell属于解释型语言(C、C++是编译型语言;Python、JavaScript、Matlab是解释型语言;Java、C#兼具编译与解释两种特性。)

1.计算机硬件 人类肯定是无法直接和它交流的
在这里插入图片描述

2.这个时候 就需要各种操作系统对硬件进行封装(Linux/Windows)
通过操作系统 去调用硬件来工作
在这里插入图片描述

3.最外层的应用程序 类似于QQ/微信等 才是我们人类操作计算机喜欢的方式
但是我们打开操作这些应用程序 或者说输入ls cd这些命令
操作系统是怎么认识这些命令然后让硬件去执行的呢?
在这里插入图片描述

4.Linux操作系统只认识二进制编码 然后通过二进制编码和硬件交互
所以这个时候Shell的作用就来了
Shell可以看做一个翻译官(命令行解析器)
Shell拿到外部应用程序的指令 会把指令解析成二进制编码
操作系统能看懂这些二进制编码 然后就会去调用硬件来完成相应工作在这里插入图片描述

1.2 Linux提供的Shell解释器

说明Shell解析器本质上也是个命令
命令在Linux中 也就是一个封装好的文件
在这里插入图片描述

1.3 Centos默认的解析器是bash

echo $SHELL
结果是:/bin/bash

二、Shell脚本入门案例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、变量

3.1 系统变量

HOME、PWD、SHELL、USER等

3.2 自定义变量

  • 基本语法
    定义变量:变量=值
    撤销变量:unset 变量
    声明静态变量(类似常量):readonly变量 注意:不能unset
    和Java一样 变量都是暂时加载在内存 重启就没了
  • 变量定义规则
    变量名称可以由字母、数字和下划线组成,但是不能以数字开头
    环境变量名建议大写
    等号两侧不能有空格 否则会被当成命令
    在bash中 变量默认类型都是字符串类型 无法直接进行数值运算
    变量的值如果有空格 需要使用双引号或单引号括起来
    export可把变量提升为全局环境变量 可供其他Shell程序使用
    在这里插入图片描述

3.3 特殊变量

$n
在这里插入图片描述

$#
在这里插入图片描述

$*
$@
在这里插入图片描述

$?
检测最后一次执行的命令的返回状态
如果这个变量的值为0,证明上一个命令正确执行
如果这个变量的值为非0(具体是哪个数 由命令自己来决定)则证明上一个命令执行不正确
在这里插入图片描述

四、运算符

$[运算式] 建议用这个
$((运算式))
在这里插入图片描述

五、条件判断

5.1 基本语法

  • test condition
  • [ condition ](注意condition前后要有空格) 常用这个

5.2 常用判断条件

== 字符串比较
-lt 小于(less than)
-le 小于等于(less equal)
-eq 等于(equal)
-gt 大于(greater than)
-ge 大于等于(greater equal)
-ne 不等于(Not equal)
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)

-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)
-d 文件存在并是一个目录(directory)

下面是一些案例
在这里插入图片描述

5.3 多条件判断

规则和Java一样
在这里插入图片描述

六、流程控制

6.1 if语句

这里赋权限是为什么 前面二、案列说过了

  • [ 条件判断式 ] 中括号和条件判断式之间必须有空格
  • if后要有空格
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.2 case语句

  • case行尾必须为单词“in” 每一个模式匹配必须以右括号 )结束
  • 双分号 ;; 表示命令序列结束 相当于java中的break
  • 最后的 *) 表示默认模式 相当于java中的default
    在这里插入图片描述
    在这里插入图片描述

6.3 for循环

for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
在这里插入图片描述

for 变量 in 值1 值2 值3…
do
程序
done
在这里插入图片描述

6.4 while循环

while [ 条件判断式 ] 
  do 
    程序
  done
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

七、read读取控制台输入

  • 基本语法:read(选项)(变量名)
  • 选项:
    -p:指定读取值时的提示符
    -t:指定读取值时等待的时间(秒)
  • 变量名:指定读取值的变量名
  • 案例实操
    提示7秒内 读取控制台输入的名称
#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

在这里插入图片描述

八、函数

8.1 系统函数

basename:

  • 基本语法:basename [string / pathname] [suffix]
  • 功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符 然后将剩下的字符串显示出来
  • suffix为后缀 如果suffix被指定了 basename会将pathname或string中的suffix去掉
  • 案例
    截取该/home/atguigu/banzhang.txt路径的文件名称
basename /home/atguigu/banzhang.txt 
# 打印banzhang.txt

basename /home/atguigu/banzhang.txt .txt
# 打印banzhang(这里的.txt就是suffix)

dirname
dirname 文件绝对路径:
从给定的包含绝对路径的文件名中去除文件名(非目录的部分)
然后返回剩下的路径(目录的部分)

# 获取banzhang.txt文件的路径
dirname /home/atguigu/banzhang.txt 
/home/atguigu

8.2 自定义函数

  • 基本语法
#定义函数
[ function ] funname[()]
{
	Action;
	[return int;] #只能返回int类型
}
#调用函数
funname

#定义函数可以化简 把[]全都去掉:
 function  funname()
{
	Action;
	return int;
}
  • 必须在调用函数地方之前 先声明函数 shell脚本是逐行运行 不会像其它语言一样先编译
  • 函数返回值 只能通过$?系统变量获得
  • 可以显示加return返回 如果不加 将以最后一条命令运行结果 作为返回值
  • return后跟数值n(范围是0-255) 如果return 300 返回值是300%256=44

案例:

# 计算两个输入参数的和
# [atguigu@hadoop101 datas]$ touch fun.sh
# [atguigu@hadoop101 datas]$ vim fun.sh

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

[atguigu@hadoop101 datas]$ chmod 777 fun.sh
[atguigu@hadoop101 datas]$ ./fun.sh 
Please input the number1: 2
Please input the number2: 5
7

在这里插入图片描述

在这里插入图片描述
如何改进结果是88的错误情况?
在这里插入图片描述
在这里插入图片描述

九、正则表达式入门

9.1 是什么

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
在很多文本编辑器里 正则表达式通常被用来检索、替换那些符合某个模式的文本
在Linux中 grep,sed,awk等命令都支持通过正则表达式进行模式匹配

9.1 常规匹配

一串不包含特殊字符的正则表达式匹配它自己 如:
cat /etc/passwd | grep at
就会匹配所有包含at的行

9.2 常用特殊字符

在这里插入图片描述
^$ 匹配出的内容就是空行


在这里插入图片描述
.*匹配的内容就是所有结果 0个或者多个的任意字符不就是所有内容


在这里插入图片描述
[a,b,c]*就表示匹配这三个字母出现0次或者多次


在这里插入图片描述

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

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

相关文章

山景BP1048 烧录器烧写

1.首先确保硬件连接没问题,烧写器不能亮红灯,亮红灯说明硬件没正确连接。硬件连接如下: 2.点击Flash Burner 3.编程目标闪存选择SDK包自带的烧写驱动器,闪存映像档选择编译好的bin文件。 4.点击刻录 5.看见有进度条在跑&#x…

一文看懂 关系模型-完整性约束

关系模型中有三类完整性约束:实体完整性、参照完整性和用户自定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束,被称为关系的两个不变性,由关系系统自动支持。 实体完整性详解: 若属性A是基本关系R的主属…

IPFoxy的正确打开方式

IPFoxy是一个全球动静态代理IP服务器软件,为全球用户提供优质的大数据代理服务,促进网络业务高校进行。目前拥有千万真实纯净IP资源,覆盖超过220个国家和地区,汇聚成优质海外代理池,支持http、https、socks5多种协议类…

什么是字节码?采用字节码的好处是什么?

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),字节码是一种中间代码,它是由源代码经过编译生成的一种二进制表示形式。字节码通常不针对特定的硬件平台,而是针对虚拟机设计的&…

IEEE802.11v协议介绍

IEEE802.11v协议简介 协议全称:无线网络管理(Wireless Network Management) 批准日期:2011年2月 协议状态:并入802.11-2012 协议别名:BSS过渡管理 主要功能 支持AP和STA间交换:关于RF环境和拓扑状态的信息,以协助STA进行漫游决策支持STA之间交换:关于RF环境状态的信…

从政府工作报告探计算机行业发展(医疗健康领域)

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

2024.3.14jsp(2)

一、实验目的 掌握eclipse开发工具的使用&#xff1b;jsp标记、如指令标记&#xff0c;动作标记&#xff1b;变量和方法的声明&#xff1b;Java程序片&#xff1b; 实验&#xff1a;看电影 源代码watchMovie.jsp <% page language"java" contentType"text…

阿里云数据湖存储加速套件JindoData

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

Java虚拟机 - JVM

JVM的内存区域划分 JVM它其实也是一个进程,进程运行的过程中,会从操作系统中申请一些资源.内存就是其中的一种.这些内存就支撑了java程序的运行.JVM从系统中申请的一大块内存,会根据实际情况和使用用途来划分出不同的空间,这个就是区域划分.它一般分为 堆区, 栈区, 程序计数器…

LeetCode周赛——388

1.重新分装苹果&#xff08;贪心&#xff09; 思路 箱子大小降序排序&#xff0c;按顺序装 class Solution { public:int minimumBoxes(vector<int>& apple, vector<int>& capacity) {int n apple.size(), m capacity.size();int sum 0;for(int i 0;…

python_Anaconda虚拟环境导出以及重现

文章目录 1. 场景2. 解决方案2.1 方案一&#xff1a;直接将打包&#xff0c;然后将包传输到另外一台服务器2.2 方案二&#xff1a;导出环境所有的包名及版本&#xff0c;然后重新安装 1. 场景 我们有时候需要把一个虚拟环境迁移到别的服务器上面去&#xff0c;这时候&#xff…

多项式回归算法模拟

python3.6 环境 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures# 生成随机数作为x变量&#xff0c;范围在-5到5之间&#xff0c;共100个样本 x np.random.un…

基于boost库的搜索引擎项目

文章目录 一、项目背景二、什么样的搜索引擎三、搜索引擎的宏观图原理四、Parse模块4.1下载boost库源代码4.2提取boost库中以.html为结尾的文件4.2.1 boost库的简单使用 4.3数据清洗(去标签化)4.3.1数据清洗的具体实现 4.4将清洗后的数据写入到raw.txt文件中 五、正排索引 vs 倒…

【数据结构七】堆与PriorityQueue详解

堆 在Java中有一种数据结构基于队列&#xff0c;并保证操作的数据带有优先级&#xff0c;该数据结构应该提供了两个最基本的操作&#xff0c;一个是返回最高优先级对象&#xff0c;一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。它的底层使用了堆这种数据结…

day-19 合并后数组中的最大元素

思路&#xff1a;从后向前遍历数组&#xff0c;用tans记录每一种可能的最大值&#xff0c;ans为实际最大值。 注意&#xff1a;若ans0,返回nums[0] 要用long code class Solution {public long maxArrayValue(int[] nums) {long ans0;long tans0;boolean flagtrue;for(int in…

SpringBoot接口添加IP白名单限制

实现流程&#xff1a; 自定义拦截器——注入拦截器——获取请求IP——对比IP是否一致——请求返回 文章背景&#xff1a; 接口添加IP白名单限制&#xff0c;只有规定的IP可以访问项目。 实现思路&#xff1a; 添加拦截器&#xff0c;拦截项目所有的请求&#xff0c;获取请求的…

MySQL 篇-深入了解事务四大特性及原理

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 事务的概述 2.0 事务的特性 2.1 原子性 2.2 一致性 2.3 持久性 2.4 隔离性 2.4.1 脏读问题 2.4.2 不可重复读问题 2.4.3 幻读问题 3.0 事务的四个隔离级别 3.1…

#QT(一种朴素的计算器实现方法)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;这是全靠自己想法写的计算器&#xff0c;没有参考任何教程。 &#xff08;1&#xff09;这个计算器只要有运算符敲入就会进行一次运算&#xff0c;所以他没有先后之后&#xff0c;无法满足运算优先级。 &#xff08;2&#xff…

服务器集群 -- nginx配置tcp负载均衡

当面临高流量、高可用性、水平扩展、会话保持或跨地域流量分发等需求时&#xff0c;单台服务器受限于硬件资源、性能有限不能满足应用场景的并发需求量时&#xff0c;引入负载均衡器部署多个服务器共同处理客户端的并发请求&#xff0c;可以帮助优化系统架构&#xff0c;提高系…

【CSP试题回顾】201712-2-游戏

CSP-201712-2-游戏 解题思路 代码实现了一个模拟游戏过程的算法&#xff0c;其中n个小朋友围成一圈&#xff0c;按照顺时针方向依次编号从1到n&#xff0c;然后按顺时针方向依次报数。每当报的数是k的倍数或者个位数是k时&#xff0c;报数的小朋友会被淘汰。游戏继续进行&…