shell脚本语言(超全超详细)[通俗易懂]

shell脚本语言(超全超详细)[通俗易懂]shell脚本语言1、shell的概述2、脚本的调用形式打开终端时系统自动调用:/etc/profile或~/.bashrc3、shell语法初识3.1、定义以开头:#!/bin/bash3.2、单个”#”号代表注释当前行第一步:编写脚本文件第二步:加上可执行权限第三步:运行三种执行方式(./xxx.shbashxxx.sh.xxx.sh)./xxx.sh…

大家好,又见面了,我是你们的朋友全栈君。

1、shell的概述

在这里插入图片描述
shell 是一种脚本语言
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)
shell命令解析器:
系统提供 shell命令解析器: sh ash bash
查看自己linux系统的默认解析:echo $SHELL
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

2、脚本的调用形式

打开终端时系统自动调用:/etc/profile 或 ~/.bashrc

/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置
开始自启动的程序,一般也在这里设置
~/.bashrc
用户自己的家目录中的.bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等
用户手动调用:用户实现的脚本
在这里插入图片描述

3、shell语法初识

3.1、定义以开头:#!/bin/bash

#!用来声明脚本由什么shell解释,否则使用默认shell
在这里插入图片描述

3.2、单个”#”号代表注释当前行

第一步:编写脚本文件

在这里插入图片描述

第二步:加上可执行权限

chmod +x xxxx.sh
在这里插入图片描述

第三步:运行

在这里插入图片描述

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

三种执行方式的不同点(./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!指定的解析器解析

如果#!指定指定的解析器不存在 才会使用系统默认的解析器

bash xxx.sh:指明先用bash解析器解析

如果bash不存在 才会使用默认解析器

. xxx.sh 直接使用默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的

三种执行情况:
打开终端就会有以后个解释器,我们称为当前解释器
我们指定解析器的时候(使用 ./xxx.sh 或 bash xxx.sh)时会创建一个子shell解析 脚本
在这里插入图片描述

注意:windows下 写脚本 在linux下执行 注意

在这里插入图片描述
执行结果:
在这里插入图片描述
将windows文件 转换成 unix文件
方法一:dos2unix 如果没有该插件 需要安装
sudo apt-get install dos2unix
dos2unix shell脚本
转换成功就可以执行运行
方法二:
需要用vi打开脚本,在最后一行模式下执行
:set ff=unix
在这里插入图片描述

4、变量

定义变量
变量名=变量值
如:num=10
引用变量
$变量名
unset :清除变量值
在这里插入图片描述
运行结果:
在这里插入图片描述
从键盘获取值read

在这里插入图片描述
运行结果:
在这里插入图片描述

案例:

在一行上显示和添加提示 需要加上-p
在这里插入图片描述
运行结果:
在这里插入图片描述

案例:读取多个值

在这里插入图片描述
运行结果:
在这里插入图片描述

案例只读变量:

在这里插入图片描述
运行结果:
在这里插入图片描述

查看环境变量:env

在这里插入图片描述
在这里插入图片描述

导出环境变量 作用:(让其他shell脚本识别该变量,设为全局变量)

source 脚本文件
source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令“.”来替代。
如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

06_sh.sh

#!/bin/bash
expor DATA=250

用source 是文件生效
在这里插入图片描述
使用 env可以查看到环境变量中已经有 DATA
在这里插入图片描述
可以在终端直接中读取:
在这里插入图片描述
在其他sh脚本读取:
在这里插入图片描述
运行结果:
在这里插入图片描述

注意事项:

1、变量名只能包含英文字母下划线,不能以数字开头
1_num=10 错误
num_1=20 正确
2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来
3、双引号 单引号的区别
双引号:可以解析变量的值
单引号:不能解析变量的值
在这里插入图片描述
运行结果:
在这里插入图片描述
如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)

export PATH=$PATH:/需要添加的路径

5、预设变量

shell直接提供无需定义的变量

在这里插入图片描述

案例:

在这里插入图片描述
运行结果:
在这里插入图片描述

脚本标量的特殊用法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加-e转义 才起换行作用
在这里插入图片描述
()由子shell 完成
在这里插入图片描述
{}由当前的shell执行

在这里插入图片描述

6、变量的扩展

6.1、判断变量是否存在

在这里插入图片描述
在这里插入图片描述

6.2、字符串的操作

在这里插入图片描述

7、条件测试

test命令:用于测试字符串、文件状态和数字
test命令有两种格式:
test condition 或[ condition ]
使用方括号时,要注意在条件两边加上空格。

7.1、文件测试

在这里插入图片描述
在这里插入图片描述

7.2、字符串测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3、数值测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4、符合语句测试

在这里插入图片描述
在这里插入图片描述

8、控制语句

在这里插入图片描述

8.1、if控制语句

格式一:
if [条件1]; then
    执行第一段程序
else
    执行第二段程序
fi
格式二:
if [条件1]; then
    执行第一段程序
elif [条件2];then
执行第二段程序
else
    执行第三段程序
fi

案例:

在这里插入图片描述

案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件

在这里插入图片描述
运行结果:
在这里插入图片描述

案例:

在这里插入图片描述
运行结果:
在这里插入图片描述

8.2、case

在这里插入图片描述
在这里插入图片描述

8.3、for循环语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例:

在这里插入图片描述

案例:扫描当前文件

在这里插入图片描述

8.4、while

在这里插入图片描述
在这里插入图片描述

8.5、until

在这里插入图片描述
在这里插入图片描述

8.6、break continue

在这里插入图片描述

9、函数

在这里插入图片描述
所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用
在这里插入图片描述

案例:求最值

在这里插入图片描述

案例:函数分文件

在这里插入图片描述
fun.sh
在这里插入图片描述
24_sh.sh
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157211.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 运维利器之–ipmitool

    运维利器之–ipmitoolIpmitool 对搞运维的哥们儿来说是一个很不错的管理工具 既支持本地操作也支持远端操作 能够不依赖服务器的 CPU 内存 存储 电源等独立工作 是一种廉价远程管理方案 借用一下官方的介绍 Theservicepr orBaseboardM BMC isthebrainbe

    2025年11月1日
    3
  • 数据库之表操作

    什么是表表(TABLE)是一种结构化的文件,可用来存储某种特定类型的数据。表中的一条记录有对应的标题,标题称之为表的字段。创建表createtablestudent(idintn

    2022年3月29日
    43
  • 《剑指offer》– 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

    《剑指offer》– 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

    2021年10月3日
    41
  • 由中序遍历和后序遍历还原二叉树_二叉树的中序列

    由中序遍历和后序遍历还原二叉树_二叉树的中序列二叉树的前序遍历、中序遍历和后序遍历之间还原二叉树1、概念(1)前序遍历   a、访问根节点;b、前序遍历左子树;c、前序遍历右子树。(2)中序遍历   a、中序遍历左子树;b、访问根节点;c、中序遍历右子树。(3)后序遍历   a、后序遍历左子树;b、后续遍历右子树;c、访问根节点。2、前序遍历和中序遍历还原二叉树思想如下:  a、根据前序遍历结果,第一个元素为二叉树的根结…

    2025年11月16日
    3
  • Jenkins安装_Noam Jenkins

    Jenkins安装_Noam Jenkins前言jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。环境准备:mac/Linuxdockerdocker拉去jenkins镜像先下载jenkins镜

    2022年7月30日
    9
  • 阿里消息队列rocketmq_阿里云mqtt

    阿里消息队列rocketmq_阿里云mqtt最近需求需要实现收款语音的播报,如果不考虑费用问题,使用推送与百度AL开发平台的语音合成功能就可也实现收款语音的播报功能,但是考虑到费用问题,同时还考虑到ios与Android可以同步使用的问题(ps:ios如果使用推送需要把应用上架到苹果商店,需要有证书,而且还需要通过审核才能进行推送。但是目前ios的签名一般都不上架,而是进行企业签,使用第三方的分发进行软件的更新,所以一般都不考虑上架)。由此…

    2025年5月31日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号