0

0

shell 脚本语法

看不見的法師

看不見的法師

发布时间:2025-07-15 09:32:35

|

1053人浏览过

|

来源于php中文网

原创

shell脚本概述:本质上是一个包含特定格式指令的文件,这些指令可以由系统的脚本解析器翻译并执行,无需编译。它充当系统内核与用户之间的沟通桥梁。

shell 脚本语法

Shell既是应用程序,又是一种脚本语言,应用程序通过解析脚本语言来执行命令。系统提供了多种Shell命令解析器,如shashbash等。可以通过echo $SHELL命令查看当前Linux系统的默认解析器。

$ echo $SHELL
/bin/bash

在Windows系统中,可以通过which sh命令查看sh命令的路径。

> which sh
/usr/bin/sh

Shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装Shell命令解释器的环境下执行。基本用法开头是#!/bin/bash,其中#!用来声明脚本由什么Shell解释,否则使用默认Shell。

系统在打开终端时会自动调用/etc/profile~/.bashrc文件。/etc/profile为系统的每个用户设置环境信息,当用户第一次登录时执行,设置系统的公共环境变量和自启动程序。~/.bashrc位于用户自己的家目录中,登录时和打开任意终端时都会自动调用。通过命令行输入sh,可以进入Shell指令状态。

>sh
sh-4.4$ echo hello world
hello world
sh-4.4$

执行Shell脚本需要当前用户具有可执行权限,可以通过chmod +x xxxx.sh命令增加权限。

Shell脚本有三种执行方式:

执行方式 含义
./xxx.sh 优先按照文件中#!指定的解析器解析,如果指定的解析器不存在,使用系统默认的解析器。
bash xxx.sh 指明先用bash解析器解析,如果bash不存在,使用默认解析器。
. xxx.sh 直接使用默认解析器解析。

Windows脚本在Linux上运行时会报错,因为换行符定义不同,可以使用dos2unix插件调整脚本格式。

sudo apt-get install dos2unix
dos2unix 

也可以使用vi编辑器,执行:set ff=unix,将文本转为Unix格式。

变量在Shell脚本中的使用包括普通变量和环境变量。定义普通变量的语法为:

变量名=变量值

引用变量使用$变量名。清除变量使用unset 变量,定义只读变量使用readonly 变量名=变量值

#!/bin/bash
num=8
echo 显示变量 $num
unset num
echo 清除变量 $num
-->
$ ./test.sh
显示变量 8
清除变量

交互式输入变量使用read命令:

read -p "显示的字符串" [变量名1 变量名2 变量名3 ...]
#!/bin/bash
read -p "输入三个数字: " a b c
echo $a
echo $b
echo $c
-->
$ ./test.sh
输入三个数字: 12 34 56
12
34
56

查看环境变量使用env命令:

#!/bin/bash
env
-->
$ ./test.sh
USERDOMAIN=VVD
OS=Windows_NT
COMMONPROGRAMFILES=C:\Program Files\Common Files
PROCESSOR_LEVEL=6
PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
CommonProgramW6432=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
_=/usr/bin/env
MSYSTEM_CARCH=x86_64
DISPLAY=needs-to-be-defined...

系统变量值可以直接使用$获取:

#!/bin/bash
echo $OS
-->
$ ./test.sh
Windows_NT

变量名只能包含英文字母和下划线,不能以数字开头。等号两边不能直接接空格符,若变量中本身包含空格,则整个字符串需用双引号或单引号括起来。双引号可以解析变量的值,单引号则不能。

#!/bin/bash
num=200
echo "num=$num" #$num当成变量的值处理
echo 'num=$num' #$num当成字符串处理

修改环境变量以常用的修改系统路径为例:

export PATH=$PATH:

Shell直接提供无需定义的预设变量:

VALL-E
VALL-E

VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

下载
变量 含义
$# 传给Shell脚本参数的数量
$* 传给Shell脚本参数的内容
$1,$2 运行脚本时传递给其的参数,用空格隔开
$? 命令执行后返回的状态,用于检查上一个命令执行是否正确
$0 当前执行的进程名
$$ 当前进程的进程号

脚本标量的特殊用法:

标记 含义
"" 双引号包含的变量会被解释
'' 单引号包含的变量会当做字符串
``(反引号) 反引号中的内容作为系统命令,并执行其内容
\\ 转义字符,如\n\t\r\a
(命令序列) 由子Shell来完成,不影响当前Shell中的变量
{命令序列} 在当前Shell中执行,会影响当前变量

变量的扩展判断变量是否存在:

${num:-val} 如果num存在,整个表达式的值为num,否则为val

字符串操作包括定义、测量长度、提取子字符串和替换字符:

str="hehe: haha: xixi:lala"
echo "str的长度为:${#str}"
-->
str的长度为:21

echo ${str:3} --> e: haha: xixi:lala

echo ${str:3:6} --> e: hah

echo ${str/:/#} --> hehe# haha: xixi:lala

条件测试使用test命令,用于测试字符串、文件状态和数字。test命令有两种格式:

test condition 或 [ condition ]

文件测试用于测试文件状态的条件表达式:

参数 含义
-e 是否存在
-d 是否是目录
-f 是否是文件
-r 是否可读
-w 是否可写
-x 是否可执行
-L 是否符号连接
-c 是否字符设备
-b 是否块设备
-s 是否文件非空

若返回为True则$?为0,否则非零。

#!/bin/bash
[ -e a ]
echo $?
[ -e bbb ]
echo $?
-->
0
1

字符串操作符用于比较字符串:

操作符 含义
= 两个字符串相等
!= 两个字符串不相等
-z 是否是空字符串
-n 是否是非空字符串
test 
test 
[  ]
[  ]

返回值为True则$?为0,否则非零。

比较运算符用于数字比较:

运算符 英文 含义
-eq equal 相等
-ne not equal 不相等
-gt greater than 大于
-ge greater equal 大于等于
-le less equal 小于等于
-lt less than 小于

逻辑运算符用于组合条件:

运算符 英文 含义
&&-a and 与操作
||-o or 或操作
! not 非操作

控制语句包括ifcaseforwhileuntil

if [条件1]; then
执行第一段程序
elif [条件2];then
执行第二段程序
else
执行第三段程序
fi
case $变量 in
变量1 | 变量2 | 变量3 ... )
执行代码段一
变量4 | 变量5 ... )
执行代码段二
*)
执行默认代码段
esac
for ((初始值; 条件值; 执行步阶))
do
代码段
done
-->
for ((i=0; i<5; i++))
do
echo $i
done

for var in con1 con2 con3 ... do 代码段 done --> for i in 1 2 3 4 5 do sum=$sum+$i done

while [  ]
do
代码段
done
until [  ]
do
代码段
done

break用于跳出循环体,continue用于跳出当前循环步骤,立即开启下一次循环。

函数定义和调用:

函数名 () {
代码段
}

function 函数名() { 代码段 }

函数名 para1 para2 ...

使用参数与一般脚本中使用参数相同,可以使用return返回值,默认无错误返回0,否则返回1。导入函数可以在fun.sh中定义的函数可以在其他sh文件中引用:

source fun.sh

参考资料:https://www.php.cn/link/ccc83cd199e289db77c9271ab00c35a0

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

85

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

747

2023.08.22

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

90

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

118

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

256

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

256

2025.10.24

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 4.2万人学习

Rust 教程
Rust 教程

共28课时 | 4.5万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号