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



posted @   卡卡发  阅读(361)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示