首页 > 其他分享 >Bash脚本基本语法

Bash脚本基本语法

时间:2024-09-25 15:36:33浏览次数:7  
标签:脚本 count 文件 echo 语法 命令 Bash



一、Bash脚本以及相关介绍


Bash脚本是一种在Unix或Linux操作系统中广泛使用的脚本语言,它允许用户编写一系列命令,这些命令将被Bash(Bourne-Again SHell)解释器执行。Bash脚本可以用于自动化各种任务,比如文件管理、程序执行、系统维护等。

编写Bash脚本的基本步骤包括:

  • 创建脚本文件‌:使用文本编辑器创建一个新的文本文件,通常以.sh作为文件扩展名,例如script.sh。

  • 编写脚本内容‌:在脚本文件中编写Bash命令和脚本逻辑。你可以使用文本编辑器来编辑和保存脚本。

  • 赋予执行权限‌:在Unix或Linux系统中,你需要为脚本文件赋予执行权限,才能运行它。可以使用chmod命令来设置权限,例如chmod +x script.sh。

  • 运行脚本‌:在终端或命令行界面中,你可以通过输入脚本文件的路径来运行它,例如./script.sh。




(1) bat文件和exe文件、elf文件、.sh文件均为可执行文件:

  • 操作系统环境‌:

.bat文件:Windows系统上的批处理文件,通常使用批处理语言编写。
exe文件:Windows系统上的可执行文件,不是文本文件,不可以使用记事本编辑。
elf文件:Linux系统下的可执行文件,通常以ELF格式保存。
.sh文件:Unix/Linux系统上的脚本文件,通常使用Shell语言编写。

  • 功能和用途‌:

.bat文件:主要用于执行一系列命令或操作,简化日常或重复性任务。
exe文件:直接执行的文件,功能丰富,执行效率相对较低。
elf文件:用于执行各种系统管理、自动化任务等,功能强大。
.sh文件:用于编写脚本,执行各种系统管理、自动化任务等,语法灵活丰富。


(2) 批处理文件和脚本文件区别:

  • 操作系统环境‌:批处理文件(.bat或.cmd)主要在Windows系统中使用,而脚本文件(如.sh)则在Unix/Linux系统中更为常见。
  • 解释器‌:批处理文件通常不需要指定解释器,直接由cmd或PowerShell执行。脚本文件则通常以#!开头,指定了脚本要使用的解释器,如Bash或Sh。
  • 语法和功能‌:批处理文件的语法相对简单,主要用于执行一系列命令或操作。脚本文件的语法更加灵活和丰富,可以包含各种命令、条件语句、循环等功能。

(3)‌CMD和PowerShell区别

  • CMD‌:CMD是命令提示符(Command Prompt)的缩写,是一个文本界面的命令行工具,允许用户通过键入文本命令来与计算机进行交互和执行各种任务。它提供了基本的命令行交互功能,如文件管理、进程管理、网络管理等。CMD是Windows系统自带的命令行工具,功能相对简单,主要用于基本的命令执行‌12。

  • PowerShell‌:PowerShell是一种更强大和灵活的命令行工具,它基于.NET Framework,并支持更复杂的脚本编写和执行。PowerShell提供了一整套强大的命令和功能,可以进行更高级的管理和自动化操作,适合进行系统管理和自动化任务‌




二、Bash脚本基本语法和结构


Linux脚本有很多解析器(Shell),不同解析器要求的脚本语法不一样。系统在解析脚本时,如果没有在脚本声明指定解析器,则会采用系统默认解析器来对脚本进行解析。在大多数 Linux 发行版中,Bash 是默认的 Shell,广泛用于写脚本和日常命令行操作。



1. 脚本声明

每个 Bash 脚本通常以 #!/bin/bash 开头, 表示使用 Bash 来执行该脚本。

#!/bin/bash

2. 注释

使用 # 来添加注释,注释不会被执行。


3. 变量

#定义变量
name="Alice"
age=25
#使用变量
bash
echo "Name: $name"
echo "Age: $age"

注意:

  • 在赋值时不要有空格。
  • 访问变量时需要加 $ 符号。

4. 条件语句

if 语句

if [ "$age" -gt 18 ]; then
    echo "成年人"
else
    echo "未成年人"
fi

case 语句

case $name in
    Alice)
        echo "Hello, Alice!"
        ;;
    Bob)
        echo "Hello, Bob!"
        ;;
    *)
        echo "Hello, stranger!"
        ;;
esac

5. 循环

for 循环

for i in {1..5}; do
    echo "Number: $i"
done

while 循环

count=1
while [ $count -le 5 ]; do
    echo "Count: $count"
    ((count++))
done

6. 函数

定义函数的基本语法如下:

function greet {
    echo "Hello, $1!"
}

greet "World"

7. 脚本参数

可以在命令行中传递参数到脚本中。

echo "第一个参数: $1"
echo "第二个参数: $2"

8. 输入与输出

输出文本

使用 echo 或 printf: echo将给定的每个字符串写入标准输出,每个字符串之间有一个空格,最后一个字符串后面有一个换行符

echo "Hello, World!"
printf "Hello, %s!\n" "World"

读取用户输入

read -p "请输入您的名字: " user_name  # -p 除了从标准输入读取数据外,还允许你在读取输入之前显示一个提示信息。
echo "欢迎, $user_name!"

9. 错误处理

使用 $? 获取上一个命令的退出状态。

mkdir /some/directory
if [ $? -ne 0 ]; then
    echo "创建目录失败"
fi

10. 执行脚本

确保脚本具有可执行权限,然后执行:

chmod +x script.sh
./script.sh

11.脚本组织方式

脚本是由命令组成的,而命令的执行都是单独的,即使报错也不影响下一条命令的执行;一行语句可以包含多个命令,用";"隔开。


三、bash脚本实例


1. 输出Hello World字符串


app.bash

#!/bin/bash

echo "Hello, World!"


2. 统计当前目录下文件数量


#!/bin/bash

count=$(ls -1 | wc -l)

echo "There are $count files in the current directory."

其中count=$(ls -1 | wc -l)

ls -1
ls 命令用于列出当前目录中的文件和子目录。
-1 选项表示每个文件或目录在输出中占一行。这使得输出格式简单,便于后续处理。

|
管道符号 | 将前一个命令的输出传递给后一个命令。在这里,它将 ls -1 的输出传递给 wc -l。

wc -l
wc(word count)命令用于统计文本的行数、字数和字符数。
-l 选项表示只统计行数。在这里,它计算 ls -1 输出的行数,即当前目录中文件和子目录的数量。

count=$(...)
使用 $() 语法将命令的输出赋值给变量 count。因此,count 将保存当前目录中的文件和子目录的数量。


报错:

原因:

  • 在 Windows 系统上创建或编辑了 Bash 脚本,然后将其复制到 Linux 系统上,
  • 使用某些文本编辑器(如 Notepad)保存文件时,默认使用了 Windows 格式的换行符。
  • 脚本文件中包含了 Windows 风格的换行符(\r\n),而在 Unix/Linux 系统中,换行符应为 \n

解决:
使用 dos2unix 工具---dos2unix 是一个专门用来转换文件格式的工具,可以将 Windows 风格的换行符转换为 Unix 风格
1.先安装dos2unix工具:
对于 Ubuntu/Debian:sudo apt-get install dos2unix
2.执行转换命令:
dos2unix app.bash




参考链接:

https://blog.csdn.net/weixin_43431593/article/details/127550041

https://baijiahao.baidu.com/s?id=1791755709986252971&wfr=spider&for=pc



标签:脚本,count,文件,echo,语法,命令,Bash
From: https://www.cnblogs.com/kakafa/p/18430631

相关文章

  • 编译安装redis运行注册服务脚本sh install_server.sh时报错。
    在编译安装redis的时候,运行注册服务脚本shinstall_server.sh时,报错。WelcometotheredisserviceinstallerThisscriptwillhelpyoueasilysetuparunningredisserverThissystemsseemstousesystemd.Pleasetakealookattheprovidedexampleserviceunitfi......
  • SQL 高级语法 MERGE INTO
    SQL高级语法MERGEINTO 根据与源表相联接的结果,对目标表进行插入、更新、删除等操作。例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步。基本语法MERGEINTOtarget_tableUSINGsource_tableONconditionWHENMATCHEDTHENXXXWHENNOT......
  • shell脚本之根据文件修改时间,删除目录下多余的文件
    shell脚本之根据文件修改时间,删除目录下多余的文件需求:目录下至保留5个文件。该需求一般用于备份,这里使用根据文件的修改时间或者创建时间来判断删除,保留最新的5个文件。#!/bin/bash#存放文件的目录addr="/opt/bak"#保留最新文件个数file_save_num=5#目录下文件总数......
  • TPAMI 2024 | SMART: 基于语法校准的多方面关系Transformer用于变化描述生成
    题目:SMART:Syntax-CalibratedMulti-AspectRelationTransformerforChangeCaptioningSMART:基于语法校准的多方面关系Transformer用于变化描述生成作者:YunbinTu;LiangLi;LiSu;Zheng-JunZha;QingmingHuang摘要变化描述生成旨在描述两幅相似图像之间的语......
  • OPENLDAP部署完整版(Linux)附一键式脚本
    (一)环境信息1,系统环境2,域信息(本章节使用)(二)应用部署1,ladp部署1、yum方式安装OpenLDAP服务2、拷贝数据库配置配置文件,并启动服务3、slappasswd生成OpenLDAP管理员密码4、导入基本的模式5、在OpenLDAPDB上配置域信息2,安装phpLDAPadmin实现通过Web管理LDAP服务1,部署httpd2,部署php应......
  • TestNG语法
    TestNG是一个功能强大的Java测试框架,具有灵活的注解体系、测试方法分组、并行执行、依赖测试、异常测试等功能。它支持创建更高级的自动化测试解决方案。下面将详细介绍TestNG的基本语法和注解的用法。1.TestNG注解TestNG通过注解来定义测试流程,每个注解有不同的用途和......
  • 【Linux】快速上手shell脚本(适合初学者)
    Shell脚本快速上手什么是Shell脚本?Shell脚本是一种通过命令行界面执行的一系列命令的文本文件,主要用于自动化任务。创建Shell脚本使用文本编辑器(如nano或vim)创建一个以.sh结尾的文件:nanomyscript.sh脚本头部在脚本的第一行指定解释器:#!/bin/bash基本命令ec......
  • 1、A+B(python语法格式,模块,主模块等)
    总结:python有许多模块,通过import引入模块,或者使用from从模块导入函数#导入math模块importmath#使用模块中的定义的变量或者函数的语法格式为:模块.变量/函数print(math.sqrt(25))#使用math模块中的sqrt函数,表示开平方根#从math模块中导入sqrtfrommathimpor......
  • /bin/bash^M: 错误的解释器: 没有那个文件或目录
    *.sh:行8:$'\r':未找到命令*.sh:行15:未预期的记号"$'{\r'"附近有语法错误*.sh:行15:`start(){ 这个问题通常是由于文件中存在Windows换行符(CRLF)而引起的。在Unix/Linux系统中,脚本应该使用LF换行符,而不是Windows下的CRLF。要解决这个问题,你可以将文件中......
  • Doris MySQL SQL语法兼容性说明
    MySQL兼容性Doris是高度兼容MySQL语法,支持标准SQL。但是Doris与MySQL还是有很多不同的地方,下面给出了他们的差异点介绍。数据类型数字类型类型MySQLDorisBoolean-支持-范围:0代表false,1代表true-支持-关键字:Boolean-范围:0代表false,1代表trueBit......