当前位置: 首页 > news >正文

(六)Linux的Shell编程(上)

一.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.lryc.cn/news/348304.html

相关文章:

  • CANopen总线_CANOpen开源协议栈
  • Rust 语言不支持 goto 语句
  • uniapp日期区间选择器
  • k8s job
  • Python---NumPy万字总结【此篇文章内容难度较大,线性代数模块】(3)
  • 【面试经典题】环形链表
  • 【联合索引】最左匹配原则是什么?
  • LeetCode 700.二叉搜索树中的搜索
  • 程序设计实践-课程设计任务布置(麦当劳) (price 200)(不包含文档)
  • leetcode 918.环形子数组的最大和
  • Spring中用到的设计模式有哪些
  • CSS 样式清单整理:文字超出部分显示省略号和设置placeholder的字体样式
  • Docker容器:Docker-Consul 的容器服务更新与发现
  • 容器化Jenkins远程发布java应用(方式二:自定义镜像仓库远程拉取构建)
  • 解密某游戏的数据加密
  • 【报错合集】完美解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”
  • YOLOv8小白中的小白安装环境教程!没一个字废话,看一遍不踩坑!
  • C#正则表达式,提取信息使用
  • 【数据结构】详解队列
  • 大模型微调方法汇总
  • 探究NVMe SSD HMB应用场景与影响-<续>
  • YTU 3166 共享单车 DFS 记忆化搜索
  • RAG应用中的路由模式
  • 运维:SSH常用命令简介
  • Springboot+Vue项目-基于Java+MySQL的流浪动物管理系统(附源码+演示视频+LW)
  • 力扣刷题:四数相加Ⅱ
  • 如果通过Glide 设置图片圆角
  • Chatgpt学习技巧
  • [初学rust] 06_rust 元组
  • 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)