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/bashif [ $USER == "slef" ]
thenecho $USER
fiif [ $PWD == "/home/slef/" ];thenecho $PWD
fiif [ $PWD == "/home/slef/" ];thenecho "HOME $PWD"
elif [ $PWD == "/mnt/hgfs/share/5.shell/3" ]
thenecho "SHARE $PWD"
elseecho "else"
fi

8. case语句

#!/bin/bashcase $1 in"y")echo inputed y;;"n")echo inputed n;;*)echo "inputed *";;
esac

9. for循环

#!/bin/bashfor i in 1 2 3 4 5
doecho $i
donefor ((i=0;i<5;i++))
doecho $i
donefor i in /etc/*
doecho $i
done

10. while语句

#!/bin/bashvar=0
while [ $var -ne 10 ]
doecho $varvar=$(($var+1))
done

11. until 语句

12. Shell 函数

#!/bin/bashfunc()
{echo "hello world"echo $0echo $1return 255
}func 12 33
exit 0
echo $?

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

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

相关文章

Vulnhub-DIGITALWORLD.LOCAL: VENGEANCE渗透

文章目录 前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、smb下载线索三、制作字典四、爆破压缩包密码五、线索分析六、提权&#xff01;&#xff01;&#xff01; Vulnhub靶机&#xff1a;DIGITALWORLD.LOCAL: VENGEANCE ( digitalworld.local: VENGEANCE …

【linux】初步认识文件系统

初步认识文件系统 前置知识的简单了解简单回顾C语言的文件操作stdin&stdout&stderr 系统文件IOopen函数的返回值文件描述符fd打开文件背后的操作文件描述符的分配规则 前置知识的简单了解 文件包括了文件内容和文件属性两个部分(文件内容顾名思义就是文件里面的数据等…

tomcat启动闪退问题解决方法

文章目录 Tomcat启动闪退的常见问题及解决方法Tomcat是什么启动闪退的常见问题及解决方法1. 内存不足问题描述&#xff1a;案例分析&#xff1a;解决方法&#xff1a; 2. 端口冲突问题描述&#xff1a;解决方法&#xff1a; 3. 日志错误问题描述&#xff1a;解决方法&#xff1…

冰蓄冷系统基础知识

冰蓄冷是将水制成冰储存冷量&#xff0c;它是潜热蓄冷的一种方式。当压力保持不变时&#xff0c;物质在相变过程中保持恒定温度并吸收或释放热量&#xff0c;通常把这个温度称为相变温度(即溶解温度或凝固温度)&#xff0c;把吸收或释放的热量称相变潜热。在常压下&#xff0c;…

基于Python的LSTM网络实现单特征预测回归任务(TensorFlow)

目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类&#xff0c;将LSTM的各个超参数声明为变量&#xff0c;便于后续使用 4、创建时间序列数据 5、划分数据集 6、定义LSTM网络 &#xff08;1&#xff09;创建顺序模…

一、初识VUE

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 Vue Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c…

MySQL常见问题解决和自动化安装脚本

常见问题 MySQL密码正确但无法登录的情况 这种情况一般都是因为缓存&#xff0c;使用mysql -u root -p123456直到成功登陆为止&#xff0c;并且进入之后重新修改密码&#xff0c;多次重复修改密码的命令并且再一次清除缓存后退出。 ALTER USER rootlocalhost IDENTIFIED WIT…

基于Unity+Vue通信交互的WebGL项目实践

unity-webgl 是无法直接向vue项目进行通信的&#xff0c;需要一个中间者 jslib 文件 jslib当作中间者&#xff0c;unity与它通信&#xff0c;前端也与它通信&#xff0c;在此基础上三者之间进行了通信对接 看过很多例子&#xff1a;介绍的都不是很详细&#xff0c;不如自己写&…

【MATLAB源码-第199期】基于MATLAB的深度学习(CNN)数字、模拟调制识别仿真,输出识别率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 基于深度学习的调制识别系统利用复杂的数学模型和算法来识别和分类从不同来源接收到的无线信号的调制类型。这种技术的应用广泛&#xff0c;特别是在无线通信、电子战、频谱监测和认知无线电等领域中具有重要价值。调制识别系…

算法导论 总结索引 | 第三部分 第十二章:二叉搜索树

1、搜索树数据结构 支持 许多动态集合操作&#xff0c;包括 SEARCH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR、INSERT 和 DELETE 等。使用搜索树 既可以作为一个字典 又可以作为一个优先队列 2、二叉搜索树上的基本操作 所花费的时间 与这棵树的高度成正比。对于有n个结点的…

汽车热辐射、热传导、热对流模拟加速老化太阳光模拟器系统

汽车整车结构复杂&#xff0c;材料种类繁多&#xff0c;在使用过程中会面临各种严酷气候环境的考验&#xff0c;不可避免会出现零部件材料老化、腐蚀等不良现象&#xff0c;从而影响汽车的外观、功能&#xff0c;甚至产生安全隐患。因此&#xff0c;分析汽车零部件材料老化腐蚀…

深入剖析Tomcat(五) 剖析Servlet容器并实现一个简易Context与Wrapper容器

上一章介绍了Tomcat的默认连接器&#xff0c;后续程序都会使用默认连接器。前面有讲过Catalina容器的两大块内容就是连接器与Servlet容器。不同于第二章的自定义丐版Servlet容器&#xff0c;这一章就来探讨下Catalina中的真正的Servlet容器究竟长啥样。 四种容器 在Catalina中…

音视频入门基础:像素格式专题(1)——RGB简介

一、像素格式简介 像素格式&#xff08;pixel format&#xff09;指像素色彩按分量的大小和排列。这种格式以每个像素所使用的总位数以及用于存储像素色彩的红、绿、蓝和 alpha 分量的位数指定。在音视频领域&#xff0c;常用的像素格式包括RGB格式和YUV格式&#xff0c;本文…

【海博】雅思该怎么练?

文章目录 前言 备考计划 模拟考试 参考资料 前言 见《【海博】浅析海博深造》 见《【海博】雅思和托福该考哪个&#xff1f;》 见《【海博】雅思该怎么考&#xff1f;》 见《【海博】雅思考什么&#xff1f;》 备考计划 第一周确定你的目标考试分数。 做一套雅思模拟试题&…

npm install报错

总结&#xff1a;没有安装visual studio 2017以上带有C桌面开发的版本 #开始试错 #报错总信息mingw_x64_win版本 百度网盘链接: link 提取码&#xff1a;3uou #尝试用mingw配置个C编译器&#xff0c;并配置环境变量&#xff0c;失败 #只认可使用VS!GIthub原址: 链接: link 上…

python公务用车医院校园企业车辆管理系统

本 Python版本&#xff1a;python3.7 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask都有,都支持 后端&#xff1a;python 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 公务用车管理智慧云服务监管平台有管理员和用户…

java中的字节流和File类

目录 正文&#xff1a; 1.File类 1.1概述 1.2常用方法 2.FileInputStream 2.1概述 2.2常用方法 3.FileOutputStream 3.1概述 3.2常用方法 总结&#xff1a; 正文&#xff1a; 1.File类 1.1概述 File类是Java中用来表示文件或目录的类&#xff0c;它提供了一系列方…

【项目学习01_2024.05.02_Day04】

学习笔记 4 课程分类查询4.1需求分析4.2 接口定义4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper 4 课程分类查询 4.1需求分析 有课程分类的需求 course_category课程分类表的结构 这张表是一个树型结构&#xff0c;通过父结点id将各元素组成一个树。 利用mybatis-plus-gen…

Sass语法---sass的安装和引用

什么是Sass Sass&#xff08;英文全称&#xff1a;Syntactically Awesome Stylesheets&#xff09; Sass 是一个 CSS 预处理器。 Sass 是 CSS 扩展语言&#xff0c;可以帮助我们减少 CSS 重复的代码&#xff0c;节省开发时间。 Sass 完全兼容所有版本的 CSS。 Sass 扩展了…

centos7安装真的Redmine-5.1.2+ruby-3.0.0

下载redmine-5.1.2.tar.gz&#xff0c;上传到/usr/local/目录下 cd /usr/local/ tar -zxf redmine-5.1.2.tar.gz cd redmine-5.1.2 cp config/database.yml.example config/database.yml 配置数据连接 #编辑配置文件 vi config/database.yml #修改后的内容如下 product…