(六)Linux的Shell编程(上)

news/2024/5/20 12:47:22

一.Shell

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
(1)Shell环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
打开vim文本编辑器,新建一个文件 main.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

#!/bin/bash
echo "Hello World !"
Hello World !

二.Shell变量

(1)变量定义
在 Shell 编程中,变量是用于存储数据值的名称。定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

your_name="xiao xin"
变量规则含义
只包含字母、数字和下划线变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
不能以数字开头变量名不能以数字开头,但可以包含数字。
避免使用 Shell 关键字不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
使用大写字母表示常量习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
避免使用特殊符尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
避免使用空格变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

(2)使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="xiao xin"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。推荐给所有变量加上花括号,这是个好的编程习惯。
已定义的变量,可以被重新定义,如:

your_name="xiao xin"
echo $your_name
your_name="xiao xie"
echo $your_name
xiao xie

1)只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:

#!/bin/bash
my_name="xiao xin"
readonly my_name
my_name="xiao xie"
/bin/sh: NAME: This variable is read only.

2)删除变量
使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。

#!/bin/sh
my_name="xiao xin"
unset my_name
echo $my_name

以上实例执行将没有任何输出。
(3)变量类型

变量类型举例
字符串变量: Shell变量通常被视为字符串。可用单引号 ’ 或双引号 " 来定义字符串my_string=‘Hello, World!’ my_string=“Hello, World!”
整数变量: 可用 declare 或 typeset 命令来声明整数变量。这样的变量只包含整数值declare -i my_integer=100
数组变量: Shell 也支持数组,允许你在一个变量中存储多个值。数组可以是整数索引数组或关联数组索引数组:my_array=(1 2 3 4 5)
环境变量: 这些是由操作系统或用户设置的特殊变量,用于配置 Shell 的行为和影响其执行环境。echo $PATH
特殊变量: 有一些特殊变量在 Shell 中具有特殊含义$0 表示脚本的名称, 1 等表示脚本的参数。 1 等表示脚本的参数。 1等表示脚本的参数。#表示传递给脚本的参数数量,$? 表示上一个命令的退出状态等。

三.Shell 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号字符串的限制:
1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
2)单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号的优点:
1)双引号里可以有变量
2)双引号里可以出现转义字符

字符串操作举例
单引号显示str=‘this is a string’
双引号显示str1=“Hello, I know you are “$your_name”! \n”
拼接字符串echo $str $str1
获取字符串长度echo ${#str},echo ${#str[0]}
提取子字符串echo ${str:1:4}
查找子字符i位置echo 'expr index “$str” i`

四.Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

</
数组操作举例
普通数组定义my_arr=( 1 2 3),my_arr[0]=1

http://www.mrgr.cn/p/61650453

相关文章

Nexpose v6.6.250 for Linux Windows - 漏洞扫描

Nexpose v6.6.250 for Linux & Windows - 漏洞扫描Nexpose v6.6.250 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, Release May 02, 2024 请访问原文链接:Nexpose v6.6.250 for Linux & Windows - 漏洞扫描,查看最新版。原创作品,转载请保…

Metasploit Pro 4.22.3-2024050201 (Linux, Windows) - 专业渗透测试框架

Metasploit Pro 4.22.3-2024050201 (Linux, Windows) - 专业渗透测试框架Metasploit Pro 4.22.3-2024050201 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, Release May 03, 2024 请访问原文链接:Metasploit Pro 4.22.3-2024050201 (Linux, Windows) - 专…

Linux(openEuler、CentOS8)常用的IP修改方式(文本配置工具nmtui+配置文件+nmcli命令)

----本实验环境为openEuler系统<以server方式安装>&#xff08;CentOS类似&#xff0c;可参考本文&#xff09;---- 一、知识点 &#xff08;一&#xff09;文本配置工具nmtui(openEuler已预装) nmtui&#xff08;NetworkManager Text User Interface&#xff09;是一…

[转]vscode必备插件,美化、炫酷、实用-留着防丢

vscode必备插件,美化、炫酷、实用-留着防丢 - 知乎 (zhihu.com) https://zhuanlan.zhihu.com/p/112016680本篇文章只推荐看起来不错的插件,并不详细介绍插件的使用方法,插件的具体使用方法可以单独对其进行百度搜索。当然,有啥问题也可以在下面评论,但我觉得可以百度的地方…

应急响应web1

应急响应的过程 目的:分析攻击时间、攻击操作、攻击结果、安全修复等并给出合理的解决方案。 保护阶段:直接断网,保护现场,看是否能够恢复数据; 分析阶段:对入侵过程进行分析,常见的方法为指纹库搜索、日志时间分析、后门追查分析、漏洞检查分析等; 复现阶段:还原攻击…

二叉树习题汇总

片头 嗨&#xff01;大家好&#xff0c;今天我们来练习几道二叉树的题目来巩固知识点&#xff0c;准备好了吗&#xff1f;Ready Go ! ! ! 第一题&#xff1a;二叉树的最大深度 解答这道题&#xff0c;我们采用分治思想 1. 递归子问题&#xff1a;左子树的高度和右子树的高度 …

FTP主动模式和被动模式(3)NAT对FTP的影响 - NAT ALG

NAT对FTP的影响 NAT环境下FTP存在的问题 FTP主动模式 FTP服务器在外部网络 在FTP主动模式下,如果网络中存在NAT,且FTP客户端在NAT内部网络中,那么FTP数据连接会出现下面的问题,如图:内部网络中的FTP客户端和外部网络中的FTP服务器端通过NAT地址转换是可以正常建立控制连接…

python读写json文件

1. 新建json文件打开记事本,重命名为.json后缀 使用的样例如下,注意看json文件格式:{"server":{"host": "example.com","port": 443,"protocol": "https"},"authentication":{"username":…

FPGA ov5640视频以太网传输

1 实验任务 使用DFZU4EV MPSoC 开发板及双目OV5640摄像头其中一个摄像头实现图像采集&#xff0c;并通过开发板上的以太网接口发送给上位机实时显示。 2 Verilog代码 2.1 顶层模块 timescale 1ns / 1ps //以太网传输视频顶层模块module ov5640_udp_pc (input sys_cl…

docker学习笔记(四)制作镜像

目录 第1步&#xff1a;编辑Dockerfile 第2步&#xff1a;编辑requirements.txt文件 第3步&#xff1a;编辑app.py文件&#xff0c;我们的程序文件 第4步&#xff1a;生成镜像文件 第5步&#xff1a;使用镜像&#xff0c;启动容器 第6步&#xff1a; 启动redis容器、将容器…

FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF

防火墙对FTP的影响 ASPF 多通道协议 应用层程序有些使用的是单通道协议,有些使用的是多通道协议。单通道协议 例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议; 防火墙一般都需要配置精细的…

字符串函数、内存函数——补充

目录 前言 1、strchr函数 1-1 函数介绍 1-1-1 函数功能 1-1-2 函数原型 1-1-3 函数参数 1-1-4 所属库 1-1-5 函数返回值 1-2 函数简单使用 1-3 函数使用场景 1-4 函数的使用总结 1-4-1 注意事项 2、strrchr函数 2-1 函数介绍 2-1-1 函数功能 2-1-2 函数原型 2…

微信小程序导出Excel文件并转发给好友

需求: 小程序的列表页面增加导出功能,点击“批量导出”按钮,则自动生成导出文件,然后自动调起微信好友列表,然后可以将文件发送给微信好友 解决方案: 由于列表数据是分页加载,所以导出直接由后端同学进行生成并返回url,则我们前端同学只负责下载wx.downloadFile并转发wx…

线段树专题

落谷1607 #include<bits/stdc.h> using namespace std;#define ls u<<1 #define rs u<<1|1const int N 1e5;int n, k, c, ans; struct line {int l, r, m; // m为候车的牛的数量bool operator<(line b) {return r < b.r;} }s[N];struct tree {int l, …

前端报错

一、加载控制台报错,但功能好像还都正确。 原因:组件还没加载就访问,是会报类似如下的错

uniapp怎么使用jsx

安装vitejs/plugin-vue-jsx npm install vitejs/plugin-vue-jsx -Dvite.config.js配置 import { defineConfig } from "vite"; import uni from "dcloudio/vite-plugin-uni"; import vueJsx from vitejs/plugin-vue-jsxexport default defineConfig({plu…

在云打印服务平台上打印资料有什么优势?

随着移动互联网和电子商务的发展,现在有越来越多的用户选择在网上购物。而对于学生们来说,现在也有越来越多的同学们开始去网上打印。而云打印的出现,让这些网上打印资料的学生选择了云打印服务。那么在云打印服务平台上打印资料有什么优势?今天小易就带大家来了解一下。 在…

GitLab使用记录

GitLab 文章目录 1. 常用命令1.1 配置邮箱 用户名1.2 查看配置1.3 基本语法 2. 连接gitlab3. 直接拉去项目 1. 常用命令 1.1 配置邮箱 用户名 git config --global user.name ShangzheChen git config --global user.email 735511377qq.com1.2 查看配置 cat ~/.gitconfig这…

labview技术交流-将时间字符串转换成时间格式

应用场景 我们在数据库中设计了datetime类型的字段&#xff0c;比如字段名就叫“保存时间”&#xff0c;当我们使用labview将表中数据读取出来后datetime类型的数据是以字符串的格式显示的。而我们想计算两条数据“保存时间”的间隔时间时&#xff0c;用字符串类型自然是没法计…

JMeter + ant + Jenkins 接口测试持续集成

JMeter + ant + Jenkins 接口测试持续集成 操作系统:linux环境变量 地址jdk11 https://www.oracle.com/java/technologies/downloads/jmeter 5.6 https://jmeter.apache.org/ant 1.10.14 https://ant.apache.org/bindownload.cgiJenkins 2.414.1 https://mirrors.jenkins.io/一…