Bash脚本基本语法

news/2024/9/25 15:38:19


一、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



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/64600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【vulhub】Discuz-任意文件删除

【vulhub】Discuz-任意文件删除 0x00漏洞介绍 通过配置个人信息的属性值,导致文件删除。 影响版本Discuz <= 3.40x01 搭建环境 数据库服务器填写db(必须db,不然安装失败),数据库名为discuz,数据库账号密码均为root,管理员密码任意。填写联系方式页面直接点击跳过本步…

Day4 与用户交互 + 格式化运算符 + 基本运算符

今天首先对昨天学的进行了复习,由这个复习可以看出昨天的我是多么的水*-*,今天的话倒是学的挺充实的,因为没有像上节课的jupyter notebook那样的东西(这节课看下来还是挺牛的,但也没到非用不可的时候,继续放着吧)。今天主要学习了三大部分,与用户的交互,格式化占位符,…

ACCESS 关于MSCOMCT2.OCX和MSCOMCTL.OCX报错的解决方案

我在ACCESS中添加了TreeView插件,结果电脑A上打开没问题,电脑B打开时就报MSCOMCT2.OCX和MSCOMCTL.OCX有错. B电脑之前是可以正常使用的,但是加了TreeView插件之后报错,说明是插件引用的问题. 在网上下载了这两个文件,复制到C:\WINDOWS\SYSTEM32目录下. 重新注册了这两个文件: 以…

74hc595

74htc595 功能 8位串行输入 8位串行或并行输出 带3态输出的存储 寄存器带直接清零的移位寄存器100 MHZ(典型) 移出频率 ESD保护H BM ELAJESD22-A114-A超过2000VMM EIAJESD23-A115-A超过200 V说明 74HC/HCT595是高速硅栅CMOS器件, 与低功率肖特基TTLLSTTL引脚兼容。 它们是根…

直接调拨单的酶活总量换算不正确

物料单位换算中的换算类型需要设置为浮动, 原来的是固定.

9月25日小学加减法的编程

根据问题要求来写程序,程序编写难度不高,交互更加友好 需要关注几个点 1加上目前是第几道题的说明 2如果输入错误要有提示第一第几道题是根据循坏的i来决定的但是要注意有些进入了循环但是没有进行答题的要写上i--; 第二要进行hasNextInt()的判断,防止错误输入导致的程序停…

Git - 初识版本库

版本库也叫仓库,英文名 repository。版本库也叫仓库,英文名 repository。 ‍ 创建版本库 之前我们说了版本库的概念:存储版本的地方(存放各个版本之间差异的地方),通常称为版本库。通常版本库是以文件(夹)的形式存放在磁盘上:Git 是用一个目录来存储各个版本和差异的文…

关于QT6.5.3版本安装、更新/添加组件的一些心得

目录引言 一、如何下载和卸载QT1.下载QT 2.卸载QT二、镜像引言 本文主要记录一下关于Visual Studio 2022和Qt Creator 14.0.1 (Community)的安装🛠️和配置⚙️ 起因是第一次下载QT时看着众多的组件不知如何选择,上网搜索攻略🔗看的头晕眼花(本来好简单的一件事🤣) 然…