Linux shell脚本-概述、语法定义、自定义变量、环境变量、预设变量、变量的特殊用法(转义字符、单双引号、大小括号)的验证

目录

1.shell概述

1.1作为应用程序:

1.2 shell 作为一门语言

2.shell 语法

2.1 shell脚本的定义与执行

(1)新建文件 

(2)程序开头第一行 必须写shell的类型 

(3)程序编写完后,修改文件权限

(4)执行脚本文件

2.2 shell变量

2.2.1自定义变量

2.2.2 环境变量

2.2.2.1临时设置环境变量

2.2.2.2永久设置环境变量

2.2.2.3多个常用环境变量调用

2.2.3预设变量

2.2.4 变量的特殊用法:" " ` ` ' ' \ () {}


1.shell概述

shell 的两层含义:
既是一种应用程序 , 又是一种程序设计语言

1.1作为应用程序:

交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能
称之为 shell 命令解析器。
shell 是用户和 Linux 内核之间的接口程序 , 用户在提示符下输入的命令都由 shell 先解释然后传给 Linux 核心,它调用了系统核心的大部分功能来执行程序、并以并行的方式协调各个程序的运行
Linux 系统中提供了好几种不同的 shell 命令解释器, sh ash bash 。一般默认使用 bash 作为默认的解 释器。 编写的 shell 脚本,都是由上述 shell 命令解释器解释执行的。
shell本质是对内核起到保护作用,只有shell能够识别的命令才能够直接操作内核来控制硬件。
调用执行过程:用户输入shell命令-》shell解析命令-》内核响应-》硬件响应
shell的调用框图如下所示:

1.2 shell 作为一门语言

它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支
完成类似于windows下批处理操作,简化我们对系统的管理与应用程序的部署 称之为shell
脚本。shell脚本是shell命令的有序集合。
shell脚本是一种脚本语言 ,我们只需使用任意文本编辑器,按照语法编写相应程序,增加
可执行权限,即可在安装shell命令解释器的环境下执行shell脚本。

2.shell 语法

2.1 shell脚本的定义与执行

(1)新建文件 

指定shell脚本文件,一般以.sh作为后缀名,也可以不加,例如:test.sh

(2)程序开头第一行 必须写shell的类型 

#!/bin/bash  #  #!用于指定当前脚本文件的shell解释器的类型 (必须放在第一行),
#  如果不写,则用默认的shell
#  这是一个注释       # 注释以 `#` 开头#shell脚本是shell命令的有序集合,代码的构成就是命令

(3)程序编写完后,修改文件权限

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

chmod 777 test.sh # test.sh可读可写可执行

(4)执行脚本文件

法1:
./test.sh   # 赋予执行权限后运行
法2:
bash test.sh (这种方式不需要修改文件权限)

2.2 shell变量

2.2.1自定义变量

(1)定义变量: num=1    #注意:变量等号两端不能有空格

#变量名只能包含英文字母下划线,不能以数字开头

(2)引用变量:num1=$num   #  新变量=$旧变量名   注意:变量等号两端不能有空格

(3)输出变量:echo $num # 输出num变量的值 

        echo "Hello World" # 输出文本

等号两边不能直接接空格符,若变量中本身就包含了空格,则 整个字符串都要用双引号 、或单引号括起来;双 引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符。

(4)清除变量:unset num #清除变量

(5)变量的其它用法:

read string
从键盘输入一个字符串付给变量 string
readonly var=100
定义一个只读变量 , 只能在定义时初始化 , 以后不能改变 , 不能被清除。
export var=300
使用 export 说明的变量,会被导出为环境变量,其它 shell 均可使用
程序:
#!/bin/bash  # 指定shell解释器(必须放在第一行)#定义变量
#shell脚本中没有数据类型可言,所以定义变量时不需要加数据类型
#shell脚本中,赋值操作时不能在等号两边加空格
#NUM = 1 #错误
NUM=6#引用变量
# $变量名 取一个变量的值
i=$NUM#输出变量
echo "NUM:"
echo $NUM
echo "i:"
echo $i#清除变量
unset NUM
echo "*************"
echo $NUMecho "开始 输入 str"
#使用read从终端读取数据保存在变量中
read str
echo "str = $str"#使用readonly创建一个只读的变量
readonly n=888
echo "n = $n"#指定变量初始化后不能再次修改变量的值,只能使用
#n=666
#echo "n = $n"

运行结果: 注意该shell程序执行,需要有可执行权限。

程序改权限:chmod 777 xx.sh # xx.sh可读可写可执行

2.2.2 环境变量

shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,我们在shell中可以直
接使用$name引用。
定义:
一般在~/.bashrc或/etc/profile文件中(系统自动调用的脚本)使用 export设置 ,允许 用户后来更改。 传统上,所有环境变量均为大写。
显示环境变量
使用 env 命令可以查看所有的环境变量。
清除环境变量
使用 unset 命令清除环境变量
常见环境变量:
HOME :用于保存注册目录的完全路径名。
PATH :用于保存用冒号分隔的目录路径名, shell 将按 PATH 变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。
PATH=$HOME/bin:/bin:/usr/bin;export PATH
HOSTNAME :主机名
SHELL :默认的 shell 命令解析器
LOGNAME :此变量保存登录名
PWD :当前工作目录的绝对路径名
2.2.2.1临时设置环境变量
在终端执行命令
MY_SHELL_NUM=999
export MY_SHELL_NUM
运行结果:
(1) 使用 env 命令可以查看所有的环境变量
(2)使用echo输出该变量结果
2.2.2.2永久设置环境变量
需要在配置文件(~/.bashrc或/etc/profile)中进行设置即可,设置完毕后需要通过
source 命令配置文件 立即生效 或 重新打开系统。
一般环境变量类似c语言中的全局变量,可以在shell脚本文件中任意使用。
以  ~/.bashrc 为例:
(1)打开文件: vi ~/.bashrc 
(2)末尾加入环境变量:
        MY_SHELL_NUM1=888
         export MY_SHELL_NUM1
(3)保存退出,在终端执行:source ~/.bashrc
(4)执行 env 命令,查看结果,或执行 echo $ MY_SHELL_NUM1
2.2.2.3多个常用环境变量调用

程序:

#!/bin/bash#PATH=$HOME/bin:/bin:/usr/bin;export PATHecho "You are welcome to use bash"
echo "Current work dirctory is $PWD"
echo "the host name is  $HOSTNAME"
echo "your home dir  $HOME"
echo "Your shell is  $SHELL"
echo "user env val is $MY_SHELL_NUM1"
echo "系统路径: $PATH"
echo "---系统路径:--- "
echo $PATH | tr ':' '\n'  # 按行显示,更易读

运行结果:

2.2.3预设变量

$# :传给 shell 脚本参数的数量
$* :传给 shell 脚本参数的内容
$1 $2 $3 ... $9 :运行脚本时传递给其的参数, 用空格隔开
$? :命令执行后返回的状态
"$?" 用于检查上一个命令执行是否正确 ( Linux 中,命令退出状态为 0 表示该命令正确 执行,任何非 0 值表示命
令出错 )
$0:当前执行的进程名  #  xx.sh
$$ :当前进程的进程号
"$$" 变量最常见的用途是用作临时文件的名字以保证临时文件不会重复
程序:
#! /bin/bash# 其中\为转义字符,让$0输入为字符,而不作为变量
#位置变量$0 - $9 保存从终端输入的每一个参数
echo "\$0 = $0" 
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$5 = $5"
echo "\$6 = $6"
echo "\$7 = $7"
echo "\$8 = $8"
echo "\$9 = $9"
#如果超过9,需要加大括号
echo "\$10 = ${10}"
echo "\$11 = ${11}"echo " 传入的参数的个数,不包括\$0"
#$#:保存命令行传入的参数的个数,不包括$0
echo "\$# = $#"echo " 传入的参数的原内容,不包括\$0"
#$@或者$*:保存所有的命令行传入的参数,但是不包括$0
echo "\$@ = $@"
echo "\$* = $*"echo " 当前进程的进程号"
#$$:获取当前进程的进程号
echo "\$$ = $$"
#read NUM # 加入这个为了,再开一个终端验证进程号是否正确echo "执行ls获取当前目录下的内容,执行成功,则\$?的值为0,执行失败,则为非0"
# $? 返回上一个命令执行的结果,如果执行成功,则$?的值为0,执行失败,则为非0
ls
echo "\$? = $?"ls ABC
echo "\$? = $?"

运行结果:

2.2.4 变量的特殊用法:" " ` ` ' ' \ () {}

(1)""(双引号):包含的 变量输出变量值
(2)''(单引号):包含的变量会当做字符串解释,保持原样输出。
(3)``(数字键1左面的反引号): 反引号中的内容作为系统命令,并执行其内容 ,可以替换输出为
一个变量。
(4)\ 转义字符:
同c语言 \n \t \r \a等 echo命令需加 -e转义
(5)(命令序列): 由子shell来完成, 不影响当前shell中的变量
{ 命令序列 }: 在当前shell中执行, 会影响当前变量
程序:
#!/bin/bashname="ASD"
#双引号里面的特殊字符,会使用其特殊含义
string1="good moring $name"
#单引号里面的特殊字符,都会失去特殊含义,保持原样输出
string2='good moring $name'echo $string1
echo $string2echo " pwd 引号 测试 "
#反引号:获取一个shell命令的输出结果,一般对有输出结果的命令经常去使用,
#也可以使用$()与反引号等价
echo "My dir is pwd"
echo "My dir is `pwd`"
echo 'My dir is `pwd`'
echo "My dir is $(pwd)" # 与echo "My dir is `pwd`"  等价echo " 转义字符 测试 "
#转义字符:使用时,需要在echo后面加上-e选项
echo "this \n is\ta\ntest"  #保持原样输出
echo -e "this \n is\ta\ntest"echo " () {} 测试 "
num=333
#由 子shell 来完成,不影响当前shell中的变量
( num=999;echo "num1 $num" )
echo num1:$num#在 当前shell 中执行,会影响当前变量
{ num=666; echo "num2 $num"; }
echo num2:$num

运行结果:

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

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

相关文章

redis集群的原理是什么?

大家好,我是锋哥。今天分享关于【redis集群的原理是什么?】面试题。希望对大家有帮助; redis集群的原理是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 集群(Redis Cluster)是一种分布式解决方案&…

PicFlow:一个图片处理与上传工作流工具(图床上传工具)

自从学习搭建网站以来,我就把很多图片托管在七牛云等图床平台上。以前总是通过网页批量上传,需要登录并一步步跳转网页操作,久而久之就厌烦了,于是花了一天时间用 Python 写了一个工具 —— PicFlow,从名字可以看出&am…

常⻅CMS漏洞之一:WordPress

WordPress是⼀个以PHP和MySQL为平台的⾃由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。截⾄2018年4⽉,排名前1000万的⽹站中超过30.6%使⽤WordPress。 WordPress是最受欢迎的⽹站 内容管理系统。全球有⼤约30%的⽹站(7亿5000个)都是使⽤WordP…

一文说清预训练与微调:AI的双重训练法则

什么是预训练? 预训练是大型语言模型训练的第一步。它在资金和计算能力的支持下,通过深入分析大量的文本数据,使模型建立起语言的基本构架。在这一阶段,模型通过学习海量的书籍、文章和网页,识别出语言的语法、句法和…

【TI MSPM0】Timer学习

一、计数器 加法计数器:每进入一个脉冲,就加一减法计算器:每进入一个脉冲,就减一 当计数器减到0,触发中断 1.最短计时时间 当时钟周期为1khz时,最短计时时间为1ms,最长计时时间为65535ms 当时…

Vue 中的日期格式化实践:从原生 Date 到可视化展示!!!

📅 Vue 中的日期格式化实践:从原生 Date 到可视化展示 🚀 在数据可视化场景中,日期时间的格式化显示是一个高频需求。本文将以一个邀请码关系树组件为例,深入解析 Vue 中日期格式化的 核心方法、性能优化 和 最佳实践…

C语言的数据类型与变量(完整版)

目录 一、基本数据类型 (一)字符类型 (二)整数类型 1、短整型 — short 2、整型 — int 3、长整型 — long 4、长长整型 — long long (三)布尔类型 (四)浮点类型 1、单精…

免费下载 | 2025低空经济产业发展报告

低空经济概览 产业链条:低空经济产业链分为上游的低空经济基础设施(如空管系统、飞行基地等)、中游的低空制造(包括无人机、eVTOL、直升机等飞行器的设计、研发、生产)和下游的低空运营及飞行服务。低空经济以低空空域…

git_version_control_proper_practice

git_version_control_proper_practice version control,版本控制的方法之一就是打tag 因为多人协作的项目团队,commit很多,所以需要给重要的commit打tag,方便checkout,检出这个tag 参考行业的实践方式。如图git、linux…

金桔网桥连载4-详解

上一节我讲到小王升职加薪,越活越年轻,然后我们的网络就成这样的 如果继续往下进行网络扩展,恐怕看的人就越看越糊涂,如果一篇文章看到人越少,那么存在的价值越小,使我想起了每年一部的梦工厂电影&#xff…

从GTC2025首次量子日看英伟达量子AI融合算力网络前景与趋势

GTC2025 Quantum Day 最新内容全部汇总: 技术名称描述合作伙伴/开发者应用场景/目标量子模拟器优化方案NVIDIA与IonQ、D-Wave合作,针对量子模拟器进行性能优化,提升量子计算任务效率。IonQ、D-Wave量子算法开发、复杂系统模拟混合量子-经典计算架构结合量子计算与经典GPU加速…

24.map和set的使用

一、序列式容器和关联式容器 序列式容器:逻辑结构为线性序列的容器,两个位置所存放的数据一般没有紧密关系,例如两个位置交换一下,逻辑结构没有改变。 关联式容器:通常是非线性结构(堆例外)&…

免费Typora1.8.6安装教程

🌟 Typora - 极简主义的 Markdown 编辑器免费指南 🌟 📌 什么是 Typora? Typora 是一款广受好评的 **所见即所得** 的 Markdown 编辑器,以极致简洁的界面和流畅的写作体验闻名。它让 Markdown 写作变得像使用 Word 一…

元音辅音及其字母组合发音

文章目录 单元音长元音/ɑː//ɔ://u://i://ɜː/// 短元音/ʌ//ɒ//ʊ//ɪ//ə//e/ 双元音/eɪ//aɪ//ɔɪ//ɪə//eə//ʊə//əʊ//aʊ/ 辅音3个鼻辅音m n ŋ 5个独立浊辅音w j r l h 20个清浊相对的辅音s zʃ ʒf vθ p bt dk gts dztʃ dʒtr dr 以下是列举的部分字母组合…

基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现

基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…

C++调用ffmpeg解复用、解码案例

框架 一个封装文件(mp4)如何播放?大体流程如下: 案例 本案例实现在windows环境下,调用ffmpeg4.4.5动态库实现上述从解封装、视频解码、音频解码的全部过程,案例测试通过。由于ffmpeg接口功能网上资料较多&a…

Linux(进程)

一.冯诺依曼体系结构 输入设备:键盘,鼠标,话筒,摄像头...网卡,磁盘 输出设备:显示器,磁盘,网卡,打印机 外设:输入设备输出设备 cpu(中央处理器&am…

[极客大挑战 2019]BabySQL—3.20BUUCTF练习day4(3)

[极客大挑战 2019]BabySQL-3.20BUUCTF练习day4(3) 做题过程 打开是以下页面(前几天有它的第一版和第二版出现)输入1’ 回显以下内容(还是字符型以单引号闭合,因为有报错信息回显) 输入1 order by 4%23回显成这个 被过…

[Effective C++]条款20:宁以 pass-by-reference-to-const替换 pass-by-value

. 在C中,函数参数与返回值的数据传递的方式,对程序的性能和正确性有着重要影响。C默认使用pass-by-value(传值)的方式传递参数。但这种方式在某些情况下会导致性能问题和对象切割问题。 C推荐使用pass-by-reference-to-const&…

文字变央视级语音转换工具

大家在制作短视频、广告宣传、有声读物、自媒体配音、学习辅助等场景的时候,经常会需要用到配音来增强视频的表现力和吸引力。然而,市面上的一些配音软件往往需要收费,这对于很多初学者或者预算有限的朋友来说,无疑增加了一定的负…