【linux】(25)shell脚本-基础入门

embedded/2024/12/5 2:48:11/

Shell 脚本是一种在类 Unix 系统(如 Linux、macOS)中用来编写自动化任务的脚本语言。掌握 Shell 编程可以帮助你高效地管理系统、批量处理文件、执行定时任务等。


1. 什么是 Shell?

Shell 是一种命令行解释器,它为用户提供了与操作系统内核交互的界面。常见的 Shell 包括:

  • Bash(GNU Bourne-Again Shell):最流行的 Shell。
  • Sh(Bourne Shell):最基础的 Shell。
  • Zsh:功能更强大,具有很多用户友好的特性。
  • Ksh(Korn Shell):兼容 Bourne Shell,增加了一些扩展。

2. Shell 脚本的基本结构

Shell 脚本通常是一个文本文件,包含一系列命令。文件以 .sh 为扩展名。以下是一个简单的 Shell 脚本示例:

#!/bin/bash
# 这是一个简单的 Shell 脚本示例
echo "Hello, World!"

解释:

  • #!/bin/bash:Shebang(井号感叹号),用于指定脚本使用的解释器路径。
  • echo:输出命令,用于在终端打印文本。

3. 创建和运行 Shell 脚本

  1. 创建脚本: 使用文本编辑器(如 vimnano)创建一个新文件:
nano myscript.sh
将脚本内容输入并保存。
  1. 赋予执行权限:
chmod +x myscript.sh
  1. 运行脚本:
./myscript.sh

4. 变量

Shell 中的变量用来存储数据。变量名区分大小写。

定义变量:

name="Alice"
age=25

引用变量:

echo "Name: $name, Age: $age"

读取用户输入:

read user_input
echo "You entered: $user_input"

5. 特殊变量

Shell 提供了一些特殊变量,常用于脚本中:

  • $0:当前脚本的名称。
  • $1, $2, ...:脚本接收的第一个、第二个参数。
  • $#:参数个数。
  • $@:所有参数。
  • $?:上一个命令的退出状态(0 表示成功)。

示例:

#!/bin/bash
echo "Script name: $0"
echo "First parameter: $1"
echo "Number of parameters: $#"

6. 运算符与计算

Shell 支持基本的算术操作。使用 expr$((...)) 进行计算。

示例:

a=5
b=3
sum=$((a + b))
echo "Sum: $sum"

7. 控制结构

7.1 条件判断(if 语句)

基本语法:

if [ condition ]; then# 条件为真时执行
elif [ another_condition ]; then# 另一个条件为真时执行
else# 其他情况
fi

示例:

#!/bin/bash
read -p "Enter a number: " num
if [ $num -gt 10 ]; thenecho "Number is greater than 10"
elseecho "Number is 10 or less"
fi

常用条件判断:

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -lt:小于
  • -ge:大于等于
  • -le:小于等于

7.2 循环(for、while)

for 循环:

for i in 1 2 3 4 5; doecho "Number: $i"
done

while 循环:

counter=1
while [ $counter -le 5 ]; doecho "Counter: $counter"counter=$((counter + 1))
done

8. 函数

函数用于封装代码块,提高脚本的可复用性。

定义函数:

my_function() {echo "This is a function"
}# 调用函数
my_function

带参数的函数:

greet() {echo "Hello, $1"
}greet "Alice"

9. 常用命令

  • 文件操作:
ls        # 列出文件
cp src dest  # 复制文件
mv old new   # 重命名或移动文件
rm file      # 删除文件
  • 文本处理:
cat file       # 查看文件内容
grep "pattern" file  # 查找文本
awk '{print $1}' file  # 处理文本
  • 系统管理:
    ps        # 查看运行的进程kill PID  # 终止进程df -h     # 查看磁盘使用情况

10. Shell 脚本调试

调试脚本时可以使用 -x 选项输出每条命令的执行情况:

bash -x myscript.sh

11. 脚本示例

批量重命名文件:

#!/bin/bash
for file in *.txt; domv "$file" "${file%.txt}.bak"
done

自动备份:

#!/bin/bash
backup_dir="/backup"
mkdir -p $backup_dir
cp -r /home/user/data $backup_dir
echo "Backup completed"

http://www.ppmy.cn/embedded/142752.html

相关文章

SHELL脚本2(Linux网络服务器 23)

利用test检查文件权限 描述:输入一个已存在的文件名,检查该文件是否具有读写执行的权限。如果文件不存在要给予提醒。 #!/bin/bash echo -e "Please input a filename,I will check the filenames type and perimission.\n\n" read -p "I…

webpack5开发环境、生产环境配置 (三)

开发环境:就是我们开发代码时使用的模式。 这个模式我们做两件事情: 1、编译代码,使浏览器能识别运行 2、代码质量检查,树立代码规范 生产环境:开发完成代码后,我们需要得到代码将来部署上线。 这个模式…

Mysql常用sql语句

数据库操作 # 创建数据库 create database 库名 charsetutf8; # 使用数据库 use 库名; # 退出数据库 quit # 查看所有数据库 show databases; # 查看当前使用的数据库 select database(); # 删除数据库 drop database 库名; 表操作 #查看当前数据库中所有表 show tables;#创…

2、Three.js初步认识场景Scene、相机Camera、渲染器Renderer三要素

三要素之间关系: 有了虚拟场景Scene,相机录像Camera,在相机小屏幕上看到的Renderer Scene当前空间 Mesh人在场景 Camera相机录像 Renderer显示器上 首先先描述下Scene: 这个场景为三要素之一,一切需要展示的东西都需…

【已解决】git push需要输入用户名和密码问题

解决方法: 1)查看使用的clone方式: git remote -v 2)若为HTTPS,删除原clone方式: git remote rm origin 3)添加新的clone方式: git remote add origin gitgithub.com:zludon/git_test.git …

用php 处理 xls和xlsx (简单版)

安装扩展 composer require phpoffice/phpspreadsheet引入扩展 use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet;导入到php,xls 和xlsx都可以 下面是简单示例,有很多可以优化的地方和格式导入 $inputFileNameD:\…

Qt5语法的connect指定多个重载信号槽函数中的具体某一个

Qt5新语法的connect函数,使用起来更加简洁明了,但如果信号槽有同名的多个重载函数,只用类名和函数名就无法绑定,这时,可以使用qOverload来指定参数类型,例如: connect(ui->comboBox, qOverlo…

23种设计模式之外观模式

目录 1. 简介2. 代码2.1 SelectFoodService (选择食品)2.2 PayService (支付服务)2.3 TakeService (制作服务)2.4 OrderService (下单服务)2.5 Food (食品)2.6 TackingSystem (外观类)2.7 Test (测试类) 3. 优缺点3. 总结 1. 简介…