Linux的Shell脚本详解

本文目录

  • 一、什么是 Shell 脚本文件 ?
  • 二、编写Shell脚本
    • 1. 基本规则
    • 2. shell 变量
      • (1)创建变量
      • (2)引用变量
      • (3)删除变量
      • (4)从键盘读取变量
      • (5)特殊变量
    • 3. 重定向符
    • 4. 管道 ‘ | ’
    • 5. 单双引号
    • 5. grep搜索匹配
    • 6. 运算符
    • 6. 数组
    • 7. if 语句
    • 8. case语句
    • 9. for循环
    • 10. while语句
    • 11. until 语句
    • 12. Shell 函数

  

一、什么是 Shell 脚本文件 ?

  Shell脚本就是命令解析器,包含一系列命令序列的文本文件。当运行这个脚本文本时,文件中包含的命令序列将得到执行。
   如果我们有一系列经常使用的 Linux 命令,我们可以把它们存储在一个文件中。Shell 可以读取这个文件并执行其中的命令。这样的文件被称为脚本文件。

例如:
run.sh

#!/bin/bash
ls
pwd
cd ..
touch hello.c

二、编写Shell脚本

1. 基本规则

(1)脚本文件命名的后缀必须是.sh

(2)Shell脚本内容的第一行必须是#!/bin/bash,这一行不是注释而是 shell 脚本的标识,表明这是一个脚本文件。
(3)脚本文件里以#作为语句的注释。
(4)使用echo 输出内容。
(5)使用cat 查看文件内容。

2. shell 变量

shell 变量没有数据类型,都是字符串,即使数值也是字符串。

(1)创建变量

命令: 变量名称=值。 等号两边不能有空格!如果值有空格则必须用""或者’’引用起来。

#!/bin/bash
a=10
b=" 10"
readonly c=3 #只读变量,不可修改

(2)引用变量

命令:$变量名。以下三种引用变量的方式等价。

#!/bin/bash
a=10
echo $a
echo ${a} 
echo "${a}"

运行脚本:输出三行 10

(3)删除变量

命令:unset 变量名

#!/bin/bash
a=10
unset a  
echo $a

因为中间删除了变量,所以不会输出任何东西。

(4)从键盘读取变量

命令:read 变量。允许用户从键盘输入,实现程序交互。

#!/bin/bash
echo "please input the first number:"
read a
echo "This number is: $a"

(5)特殊变量

在这里插入图片描述

a.sh

#!/bin/bash
echo $1
echo $2
echo $3
echo $0
echo $#
echo $@
echo $*
echo $?
echo $$
echo "finally"

在这里插入图片描述

3. 重定向符

在这里插入图片描述
使用重定向符时,文件不存在则自动创建文件。

#!/bin/bash
echo hello > 1.c #将 hello 输入到 1.c文件里
cat < 1.c > 2.c #从1.c文件里获取内容,输出到2.c文件里
cat 2.c #查看2文件里的内容

4. 管道 ‘ | ’

   管道操作符|用于连接左右两个命令,将|左边的命令执行结果(输出)作为|右边命令的输入。

5. 单双引号

' '" "的区别:
单引号:消除所有字符的特殊意义。
双引号:消除除了$、" " 、’ ’ 三种以外其它字符的特殊意义。

#!/bin/bash
a=10
echo ${a}     #输出:10
echo "${a}"   #输出:10
echo '${a}'   #输出:${a}

5. grep搜索匹配

命令:grep [选项] 搜索字符 在哪个文件搜索(文件名)

选项作用
- i忽略大小写,不区分大小写地匹配模式。
- r递归地搜索目录及其子目录下的文件。
- l只打印包含匹配模式的文件名,而不打印匹配的行。
- n打印匹配行的行号。
- v反转匹配,只打印不匹配模式的行。
- w仅匹配整个单词,而不是部分匹配。
- c打印匹配模式的行数统计。

举例:1.txt 内容如下

"hello world"
"this is a test"

使用命令:grep "hello" 1.txt
在这里插入图片描述

6. 运算符

在这里插入图片描述

6. 数组

7. if 语句

#!/bin/bash

if [ $USER == "slef" ]
then
	echo $USER
fi

if [ $PWD == "/home/slef/" ];then
	echo $PWD
fi

if [ $PWD == "/home/slef/" ];then
	echo "HOME $PWD"
elif [ $PWD == "/mnt/hgfs/share/5.shell/3" ]
then
	echo "SHARE $PWD"
else
	echo "else"
fi

8. case语句

#!/bin/bash

case $1 in
	"y")
		echo inputed y
		;;
	"n")
		echo inputed n
		;;
	*)
		echo "inputed *"
		;;
esac

9. for循环

#!/bin/bash

for i in 1 2 3 4 5
do
	echo $i
done

for ((i=0;i<5;i++))
do
	echo $i
done

for i in /etc/*
do
	echo $i
done

10. while语句

#!/bin/bash

var=0
while [ $var -ne 10 ]
do
	echo $var
	var=$(($var+1))
done

11. until 语句

12. Shell 函数

#!/bin/bash

func()
{
	echo "hello world"
	echo $0
	echo $1
	return 255
}

func 12 33
exit 0
echo $?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【USB 3.2 Type-C】 端口实施挑战的集成解决方案 (补充一)

USB 3.2 Type-C 端口集成 补充&#xff0c;上一篇感觉还有没理解到位的一部分&#xff1b; 一、只做正反插的通信&#xff0c;已经差不多够了&#xff0c;但是这并不是完整的TYPE-C,必须要补充上PD; 参考连接&#xff1a; TYPE-C PD浅谈&#xff08;一&#xff09;https://w…

【MyBatis】深入解析MyBatis:高效操作数据库技术详解

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【MyBatis】深入解析MyBatis&#xff1a;高效操作数据库技术详解 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 动态SQL1. \<if>标签2. \<trim&…

易查分查询分组功能如何使用?

期中考试马上要陆续开始&#xff0c;老师如果负责多个班级或年级&#xff0c;如何把同一级部的查询单独放到一个列表页呢&#xff1f; 易查分的查询分组功能就可实现&#xff0c;下面就来教大家如何使用此功能。 &#x1f4d6;案例&#xff1a;负责相关工作的老师&#xff0c;需…

(代码结构3)项目redis key 管理

场景:项目中到处可见的key&#xff0c;没有统一管理&#xff0c;极其难维护。大佬同事实现了一个。 代码 如图,Redis.php 是对redis的二次封装&#xff0c;对redis key模块的强制校验&#xff0c;FillerKeyTrait.php 是对filler模块的key获取。主要原理是:对redis二次封装&…

线性表—单链表实现

文章目录 链表介绍 单链表介绍 创建单链表节点 销毁 打印 查找 创建节点 增加数据 尾插 头插 指定位置插入 删除数据 尾删 头删 指定位置删除 整体代码 SListNode.h SListNode.c 链表介绍 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;由一…

每日OJ题_贪心算法二③_力扣1005. K 次取反后最大化的数组和

目录 力扣1005. K 次取反后最大化的数组和 解析代码 力扣1005. K 次取反后最大化的数组和 1005. K 次取反后最大化的数组和 难度 简单 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。…

Python根据预设txt生成“你画我猜”题目PPT(素拓活动小工具)

Python根据预设txt生成“你画我猜”题目PPT&#xff08;素拓活动小工具&#xff09; 场景来源 去年单位内部的一次素拓活动&#xff0c;分工负责策划设置其中的“你画我猜”环节&#xff0c;网络上搜集到题目文字后&#xff0c;想着如何快速做成对应一页一页的PPT。第一时间想…

机器学习笔记-20

处理大数据集的算法 1. 随机梯度下降 我们之前一直在学的梯度下降算法也叫Batch梯度下降算法&#xff0c;前面的笔记有提过一嘴。以线性回归为例子&#xff0c;随机梯度下降也适用于其他使用Batch梯度下降算法求参数的学习算法&#xff0c;随机梯度下降是对Batch梯度下降算法的…

[图解]被严重污染的领域专家

0 00:00:00,740 --> 00:00:04,610 今天我们来说一下领域专家 1 00:00:05,480 --> 00:00:06,920 这个概念 2 00:00:08,460 --> 00:00:13,180 这个概念现在已经被严重污染了 3 00:00:16,080 --> 00:00:21,170 你看&#xff0c;这是来自一个领域驱动设计课程的资料…

数据结构与算法---树

数据结构可视化网址 Structure Visualization: https://www.cs.usfca.edu/~galles/visualization/Totuma: https://www.totuma.cn/Algorithm Visualizer: https://algorithm-visualizer.org/ 构建二叉树 // C#include<stdio.h> #include<stdlib.h>typedef char T…

题目:线性代数

问题描述&#xff1a; 解题思路&#xff1a; 列相乘&#xff0c;然后行相加。 注意点&#xff1a;由于元素数据范围最大为1e6&#xff0c;两个元素相乘乘积最大为1e12&#xff0c;如果元素类型为int则在乘的过程中就会爆炸&#xff0c;所以需要开long long类型。 AC代码…

【Linux网络】SSH服务

目录 一、SSH概述与使用 1.1 定义 1.2 优点 1.3 原理 1.4 命令登录 1.5 跳板登录 1.6 远程控制 二、SSH配置 2.1 常用的服务端配置 2.2 ssh服务最优配置 三、免密登录 3.1 操作原理 3.2 操作步骤 一、SSH概述与使用 1.1 定义 SSH&#xff08;Secure Shell&#…

【C++】滑动窗口:最大连续1的个数

1.题目 2.算法思路 其实在做这道题的时候并不需要真的把0翻转成1&#xff0c;只需要找到最长的子数组且该子数组中0的个数不大于K&#xff0c;就可以了&#xff01; 当然我们首先想到的是暴力穷举法&#xff1a; 找到所有符合题意的子数组&#xff0c;跳出最长的那个就可以了…

Integer中的缓存机制

先看一个示例&#xff1a; public static void main(String[] args) {Integer a127;Integer b127;System.out.println(ab);Integer c128;Integer d128;System.out.println(cd);} 输出&#xff1a; true false 为什么明明都是同一个数字进行比较&#xff0c;当数字等于127的…

JVM笔记-常用命令

1、jstat jstat是一个极强的监视JVM的工具&#xff0c;可以用来监视JVM的各种堆和非堆的大小以及内存使用量。 Usage: jstat -help|-optionsjstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]jstat的常用用法如图所示&#xff…

Matlab各个版本介绍、区别分析及推荐

MATLAB&#xff0c;由美国MathWorks公司出品&#xff0c;是一款广泛应用的商业数学软件。自其诞生之初&#xff0c;MATLAB便以其强大的矩阵计算能力、灵活的编程环境以及广泛的应用领域&#xff0c;赢得了全球科研工作者和工程师的青睐。本文将详细介绍MATLAB的各个版本&#x…

蓝桥杯练习系统(算法训练)ALGO-950 逆序数奇偶

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 老虎moreD是一个勤于思考的青年&#xff0c;线性代数行列式时&#xff0c;其定义中提到了逆序数这一概念。不过众所周知我们…

力扣hot100:101. 对称二叉树(双指针以不同方式递归)

LeetCode&#xff1a;101. 对称二叉树 看了第一个样例&#xff0c;很容易直接层序遍历看每一层的前后是否相同。但接下来这个样例告诉你&#xff0c;不能这样做。 层序遍历 仔细思考会发现&#xff0c;层序遍历不能看本结点&#xff0c;但是可以看儿子结点是否对称&#xf…

RK3568平台(时间篇)看门狗

一.看门狗原理 在产品化的嵌入式系统中&#xff0c;为了使系统在异常情况下能自动复位&#xff0c;一般都需要引入看门狗。 看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后&#xff0c;计数器开始自动计数&#xff0c;经过一定时间&#xff0c;如果没有被…

笔记-mathtype公式在PDF或打印出来显示不全

原文中的公式&#xff1a; 纸质版打印出来的公式有缺失 问题描述&#xff1a;mathtype公式编辑器所编辑的公式转成PDF或者打印出来有缺失 以下是解决方法的具体描述。 目录 一、准备工作二、操作步骤 一、准备工作 1、工具&#xff1a;mathtype、微软word 二、操作步骤 …