一篇文章让你彻底掌握 shell 语言

news2025/1/10 12:07:22

一篇文章让你彻底掌握 shell 语言

    • 1. 前序
    • 2. shell介绍
      • 2.1. 什么是shell
      • 2.2. 什么是shell编程
      • 2.3. shell解释器
    • 3. 基本语法
      • 3.1 第一个shell脚本
      • 3.2 注释
      • 3.3. echo
        • 3.3.1 **输出字符串**
        • 3.3.2 **输出变量**
        • 3.3.3 **启用转义字符**
        • 3.3.4 **向文件添加内容**
        • 3.3.5 **输出命令执行结果**
        • 3.3.6 **输出文件**
      • 3.4. printf
      • 3.5 变量
        • 3.5.1 变量名命名规则:
        • 3.5.2 定义变量:
        • 3.5.3 使用变量:
        • 3.5.4 只读变量:
        • 3.5.5 删除变量:
        • 3.5.6 变量类型:
      • 3.6 字符串
        • 3.6.1 **单引号:**
        • 3.6.2 **双引号:**
        • 3.6.3 **不用引号:**
        • 3.6.4 **字符串方法**
      • 3.7 数组
        • 3.7.1 **定义数组:**
        • 3.7.2 **读取数组元素:**
        • 3.7.3 **获取数组长度:**
        • 3.7.4 **删除数组元素:**
      • 3.8 运算符
        • 3.8.1 算术运算符
        • 3.8.2 关系运算符
        • 3.8.3 布尔运算符
        • 3.8.4 逻辑运算符
        • 3.8.5 字符串运算符
        • 3.8.6 文件测试运算符
    • 4. 流程控制
      • 4.1 选择结构
        • 4.1.1 if语句
        • 4.1.2 case语句
      • 4.2 循环结构
        • 4.2.1 for循环
        • 4.2.2 while循环
        • 4.2.3 until循环
        • 4.2.4 select in循环
        • 4.2.4 break和continue
    • 5. 函数
      • 5.1 函数定义
      • 5.2 函数调用
      • 5.3 函数返回值
    • 6. 其他
      • 6.1 test 和 []
      • 6.2 [[]] 和 []
      • 6.3 (())命令
      • 6.4 source命令

1. 前序

手动安装jdk

# 第1步 切换到家目录
cd
# 第2步 下载jdk镜像源
wget -c https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz

# 第3步 新建/opt/java目录
mkdir /opt/java

# 第4步 解压jdk至/opt/java目录下
tar -xvf jdk-8u151-linux-x64.tar.gz -C /opt/java

# 第5步 设置软链接
ln -s /opt/java/jdk1.8.0_151/bin/java /usr/sbin/java

# 第6步 java命令是否可用
java -version

存在问题:

1、得特别熟悉安装软件

2、每次安装都要去捋安装思路;

3、每安装一步,都需要手动敲命令,耗时耗力;

4、部署n台,更加耗时,效率低…

问题解决方法:shell编程,编写shell脚本

2. shell介绍

2.1. 什么是shell

  • shell是一门编程语言,类似python、php一样的解释型编程语言

2.2. 什么是shell编程

编写的代码文件运行在shell编程语言环境中,类似编写运行在python、php编程语言环境下的代码文件,因为shell是一门解释型语言,所以也称为编写shell脚本(shell script),文件名后缀常用.sh

2.3. shell解释器

常见shell解释器有以下几种:

  • Bash (Bourne Again Shell): Bash是最常用的Shell解释器,也是默认的Linux命令行解释器。它继承了Bourne Shell的特性,并添加了许多功能和改进,包括命令历史、自动补全、作业控制等。

  • sh (Bourne Shell): Bourne Shell是Unix系统中最早的Shell解释器之一,它是其他Shell的基础,语法相对简单,常用于编写脚本。

  • csh (C Shell):C Shell使用C语言风格的语法,提供了一些便于程序员使用的功能,如命令行编辑和作业控制。它在某些Unix系统中是默认的Shell解释器。

  • ksh (Korn Shell: Korn Shell是由Bourne Shell和C Shell发展而来的Shell解释器,它继承了两者的特性,并添加了一些新的功能和语法,如命令历史、命令别名等。

  • tcsh (Enhanced C Shell): tcsh是C Shell的扩展版本,提供了更多的功能和命令补全等增强特性。

查看系统正在使用解释器

env

echo $SHELL

查看系统已安装解释器

cat /etc/shells

chsh -l

切换系统解释器

# 需要退出重登
chsh

# 需要退出重登
chsh -s /bin/sh

exec bash

交互式shell和非交互式shell

交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。

[root@centos ~]# pwd
/root

非交互式模式:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。

sh test.sh

3. 基本语法

3.1 第一个shell脚本

# 打开test.sh文件
vim test.sh

# test.sh文件写入内容
echo "hello,world"

# sh解释器执行脚本
sh test.sh

# bash解释器执行脚本
bash test.sh

# 给test.sh加可执行权限
chmod +x test.sh

# 用系统默认解释器运行test.sh脚本
./test.sh

/root/test.sh

# 也可以给test.sh脚本指定shell解释器
[root@centos ~]# cat test.sh
#!/bin/sh
echo "hello,world"

# 推荐这种方式指定shell解释器
[root@centos ~]# cat test.sh 
#!/usr/bin/env sh
echo "hello,world"

3.2 注释

注释起到说明描述作用,解释器执行文件(脚本)时会被忽略掉。

  • 单行注释:以#开头,到行尾内容会被解释器忽略掉
  • 多行注释:以:<<EOF开头,到EOF结尾之间的内容会被解释器忽略掉
[root@centos ~]# cat test.sh 
#!/usr/bin/env sh

# 作者:buddha
# 作用:测试脚本,可删除

echo 

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

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

相关文章

YOLOv4 学习记录

文章目录 整体概况数据增强Mosaic数据增强 基于CSPNet网络思想的架构改进Mish激活函数CSPNetCSPNet 3 大优势Partial Transition 层 CSPDarkNet (yolo v4 中的CSPDarkNet53) NeckSPPNetPAN-FPN 结构 正负样本匹配损失函数IOU 损失函数IOU的2个问题&#xff1a; GIOU Loss示意图…

9月前三大海外“债主”分别减持美债,”美债还完全吗?

KlipC报道&#xff1a;当地时间11月16日&#xff0c;美国财政部公布了2023年9月的国际资本流动报告(TIC)&#xff0c;日本在今年9月继续位居美国国债的最大海外持有国&#xff0c;但所持美国国债环比减少285亿美元&#xff0c;为四个月里首度减持美债&#xff0c;中国大陆仍为美…

OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域

文章目录 前言一、绘制图形1. 绘制直线2. 绘制圆3. 绘制矩形4. 绘制椭圆5. 绘制多边形6. 绘制文字7. 可选参数8. 手工绘制OpenCV的logo 二、图像金字塔1. 高斯金字塔2. 拉普拉斯金字塔 三、感兴趣区域&#xff08;ROI&#xff09;数组切片方式OpenCV截取方式 总结 前言 OpenCV…

【powershell】入门和示例

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ 简介用途IDE解决此系统上禁止运行脚本 2️⃣ 语法3️⃣ 实战数据库备份执行循环拷贝文件夹 &#x1f6ec; 文章小结&#x1f4d6; 参考资料 &#x1f6eb; 导读 开发环境 版本号描述文章日期2023-11-17操作系统Win10 - 22H21904…

设计模式-备忘录模式-笔记

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态&#xff0c;便会暴露对象的细节…

ubuntu20.04在docker下运行ros-noetic

经常折腾虚拟机各双系统 &#xff0c; 想着不如把docker利用起来&#xff0c;下面算是一个初学者使用docker运行ros的记录&#xff1a; 1. 安装 使用官方安装脚本自动安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh验证是否安装成功 doc…

openRPA开源项目源码编译

最近接触到了一个新的领域——RPA&#xff0c;RPA全称Robotic Process Automation&#xff0c;中文名为机器人流程自动化。RPA可以视作一个数字机器人&#xff0c;它可以通过程序来模拟人与软件系统的交互过程&#xff0c;代替人工将大量重复、有规则的计算机操作自动化&#x…

【Vue配置项】 computed计算属性 | watch侦听属性

目录 前言 computed计算属性 什么是计算属性&#xff1f; Vue的原有属性是什么&#xff1f; 得到的全新的属性是什么&#xff1f; 计算属性怎么用&#xff1f; 计算属性的作用是什么&#xff1f; 为什么说代码执行率高了&#xff1f; computed计算属性中的this指向 co…

CTFd-Web题目动态flag

CTFd-Web题目动态flag 1. dockerhub注册2. dockerfile编写3. 上传到docker仓库4. 靶场配置5. 动态flag实现 1. dockerhub注册 想要把我们的web题目容器上传到docker仓库中&#xff0c;我们需要dockerhub官网注册一个账号&#xff0c;网址如下 https://hub.docker.com/2. dock…

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,Kotlin

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边&#xff0c;Kotlin import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.…

基于ssm+vue设备配件检修管理系统

摘要 随着工业设备的日益复杂和多样化&#xff0c;设备配件的检修管理成为保障生产运行和设备寿命的关键环节。本研究基于SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09;&#xff0c;致力于设计和实现一套全面、高效的设备配件检修管理系统。该系统不仅能够提高设…

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构&#xff1f; 数据结构是带有结构特性的数据元素的集合&#xff0c;它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…

常见面试题-MySQL软删除以及索引结构

为什么 mysql 删了行记录&#xff0c;反而磁盘空间没有减少&#xff1f; 答&#xff1a; 在 mysql 中&#xff0c;当使用 delete 删除数据时&#xff0c;mysql 会将删除的数据标记为已删除&#xff0c;但是并不去磁盘上真正进行删除&#xff0c;而是在需要使用这片存储空间时…

【原创】java+swing+mysql校园活动管理系统设计与实现

前言&#xff1a; 本文介绍了一个校园活动管理系统的设计与实现。该系统基于JavaSwing技术&#xff0c;采用C/S架构&#xff0c;使用Java语言开发&#xff0c;以MySQL作为数据库。系统实现了活动发布、活动报名、活动列表查看等功能&#xff0c;方便了校园活动的发布和管理&am…

如何合理估算 Java 线程池大小

前 言 Java 中的线程创建会产生显著的成本。创建线程会消耗时间&#xff0c;增加请求处理的延迟&#xff0c;并且涉及 JVM 和操作系统的大量工作。为了减轻这些开销&#xff0c;线程池发挥了作用。 在本文中&#xff0c;我们将深入研究确定理想线程池大小的艺术。经过微调的线…

【数据结构】栈与队列的实现

栈与队列是数据结构中重要的结构&#xff0c; 可以用于解决一些题目 模拟实现时可以增加对于这些结构的理解&#xff0c;也可以巩固我们的语言水平&#xff0c;解决某些题目也会有很好的效果 话不多说 目录 栈的实现结构体的定义&#xff1a;初始化栈:压栈&#xff1a;出栈&am…

leetcode栈和队列三剑客

用队列实现栈 队列是先进先出的&#xff0c;而栈是只能在栈顶进行出栈和入栈&#xff0c;那我们这道题要用队列来实现栈的话&#xff0c;这里给的思路是两个队列&#xff0c;因为两个队列的话就可以相互导数据&#xff0c;比如我们来实现这个题目的push函数&#xff0c;我们的栈…

面试其他注意事项

面试其他注意事项 一、面试反问 这个岗位的日常工作和主要职责是什么&#xff1f;咱们这边主要负责什么业务&#xff0c;用到了哪些技术呢&#xff1f;对于我们校招生有没有培养体系呢&#xff1f;脱产培训&#xff0c;还是边工作边熟悉&#xff1f;会有导师带嘛&#xff1f;…

飞书开发学习笔记(八)-开发飞书小程序Demo

飞书开发学习笔记(八)-开发飞书小程序Demo 一.小程序开发概述 1.1 小程序开发概述 飞书开发文档中查看&#xff1a;小程序开发概述 飞书小程序是指可以运行在飞书客户端中的小程序&#xff0c;小程序的一套代码可以适配 Android、iOS、PC 多平台&#xff0c;且用户体验与飞书…

计算机多媒体

1&#xff0c;媒体、多媒体 2&#xff0c;体系结构 3&#xff0c;采样、编码