一、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 ]; thenecho "成年人"
elseecho "未成年人"
fi
case 语句
case $name inAlice)echo "Hello, Alice!";;Bob)echo "Hello, Bob!";;*)echo "Hello, stranger!";;
esac
5. 循环
for 循环
for i in {1..5}; doecho "Number: $i"
done
while 循环
count=1
while [ $count -le 5 ]; doecho "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 ]; thenecho "创建目录失败"
fi
10. 执行脚本
确保脚本具有可执行权限,然后执行:
chmod +x script.sh
./script.sh
11.脚本组织方式
脚本是由命令组成的,而命令的执行都是单独的,即使报错也不影响下一条命令的执行;一行语句可以包含多个命令,用";"隔开。
三、bash脚本实例
1. 输出Hello World字符串
app.bash
#!/bin/bashecho "Hello, World!"
2. 统计当前目录下文件数量
#!/bin/bashcount=$(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