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

Shell既是应用程序,又是一种脚本语言,应用程序通过解析脚本语言来执行命令。系统提供了多种Shell命令解析器,如sh、ash、bash等。可以通过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直接提供无需定义的预设变量:
| 变量 | 含义 |
|---|---|
$# |
传给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 | 非操作 |
控制语句包括if、case、for、while和until。
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号