首页 > 运维 > linux运维 > 正文

shell 脚本语法

看不見的法師
发布: 2025-07-15 09:32:35
原创
1043人浏览过

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 <shell_file></shell_file>
登录后复制

也可以使用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 FilesCommon Files
PROCESSOR_LEVEL=6
PSModulePath=C:Program FilesWindowsPowerShellModules;C:Windowssystem32WindowsPowerShell1.0Modules
CommonProgramW6432=C:Program FilesCommon 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:<your_path></your_path>
登录后复制

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

德语写作助手
德语写作助手

德语助手旗下的AI智能写作平台,支持对德语文本进行语法词汇纠错、润色、扩写等AI功能。

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

脚本标量的特殊用法:

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

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

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

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

str="hehe: haha: xixi:lala"
echo "str的长度为:${#str}"
-->
str的长度为:21
<p>echo ${str:3}
-->
e: haha: xixi:lala</p><p>echo ${str:3:6}
-->
e: hah</p><p>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 <op><str>
test <str1><op><str2>
[ <op><str> ]
[ <str1><op><str2> ]
登录后复制

返回值为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</p><p>for var in con1 con2 con3 ...
do
代码段
done
-->
for i in 1 2 3 4 5
do
sum=$sum+$i
done
登录后复制
while [ <condition> ]
do
代码段
done
登录后复制
until [ <condition> ]
do
代码段
done
登录后复制

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

函数定义和调用:

函数名 () {
代码段
}</p><p>function 函数名() {
代码段
}</p><p>函数名 para1 para2 ...
登录后复制

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

source fun.sh
登录后复制

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

以上就是shell 脚本语法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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