Linux Shell基础常用脚本命令及应用案例

news2024/11/13 10:09:40

文章目录

    • 常用的 Shell 命令
      • 1. 变量
      • 2. 注释
      • 3. 输出
      • 4. 输入
      • 5. 条件判断
      • 6. 循环
      • 7. 函数
      • 8. 运算
      • 9. 流程控制
      • 10. 文件和目录操作
      • 11. 错误处理
    • Shell 脚本应用案例
      • 1. Hello World 脚本
      • 2. 创建系统账户及设置密码
      • 3. 日志文件备份
      • 4. 一键部署 LNMP 环境
      • 5. 检查磁盘空间
      • 6. 自动安装软件包
      • 7. 文件查找与删除
      • 8. 系统信息报告
      • 9. 网络监控脚本
      • 10. 文件内容替换
      • 11. 系统服务管理
      • 12. 系统更新脚本
      • 13. 备份数据库

常用的 Shell 命令

Linux Shell 脚本是一种强大的工具,可以用来自动化日常任务、系统管理、数据处理等。下面是一些常用的 Shell 命令和它们在脚本中的使用方法。

1. 变量

变量用于存储值或字符串。在 Bash shell 中定义变量非常简单:

variable_name=value

示例:

#!/bin/bash
name="John Doe"
echo "Hello, $name!"

2. 注释

# 符号之后的内容会被当作注释,不会被执行。

# This is a comment

3. 输出

echo 命令用于输出文本到标准输出(通常是终端)。

echo "This is an output message."

4. 输入

read 命令用于从用户获取输入。

echo "Enter your name:"
read name
echo "Hello, $name!"

5. 条件判断

if 语句用于基于条件执行代码块。

if [ "$number" -gt 10 ]; then
    echo "Number is greater than 10."
else
    echo "Number is less than or equal to 10."
fi

6. 循环

  • for 循环遍历列表中的元素。
  • while 循环在条件为真时重复执行。
# For loop
for i in {1..5}; do
    echo "Loop iteration: $i"
done

# While loop
i=1
while [ $i -le 5 ]; do
    echo "Loop iteration: $i"
    ((i++))
done

7. 函数

函数允许你将一系列命令组合起来,并且可以多次调用这些命令。

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

greet "Alice"

8. 运算

可以进行简单的数学运算。

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

9. 流程控制

  • break 退出循环。
  • continue 跳过当前迭代并继续下一次迭代。
for i in {1..10}; do
    if [ $i -eq 5 ]; then
        break
    fi
    echo $i
done

for i in {1..10}; do
    if [ $((i % 2)) -eq 0 ]; then
        continue
    fi
    echo $i
done

10. 文件和目录操作

  • mkdir 创建目录。
  • rm 删除文件。
  • cp 复制文件。
  • mv 移动或重命名文件。
  • grep 在文件中搜索模式。
  • wc 统计字节数、字数、行数等。
  • sort 对文件内容排序。
  • uniq 过滤重复的行。
  • sed 文本流编辑器。
  • awk 强大的文本处理工具。

示例:

mkdir new_directory
cp file.txt new_directory/
wc -l file.txt

11. 错误处理

通过检查命令的退出状态来处理错误。

command || echo "Command failed."
command && echo "Command succeeded."

以上就是一些基本的 Shell 脚本命令和结构。你可以根据需要组合这些命令来创建更复杂的脚本。

Shell 脚本应用案例

以下是几个具体的 Shell 脚本应用案例,这些案例基于之前提到的一些常见任务:

1. Hello World 脚本

这个脚本是最简单的例子,用于输出“Hello World!”。

#!/bin/bash
echo "Hello World!"

2. 创建系统账户及设置密码

这个脚本接受两个参数:用户名和密码,然后创建一个新用户并设置密码。

#!/bin/bash
# 通过位置变量创建 Linux 系统账户及密码
#$1 是执行脚本的第一个参数 (用户名)
#$2 是执行脚本的第二个参数 (密码)
useradd "$1"
echo "$2" | passwd --stdin "$1"

3. 日志文件备份

这个脚本每周五凌晨 3 点自动备份 /var/log 目录下的所有日志文件,并将它们压缩成一个 .tar.gz 文件。

#!/bin/bash
# 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
tar -czf log-`date +%Y%m%d`.tar.gz /var/log

为了使这个脚本能够定期运行,你需要在 crontab 中添加一条定时任务:

# 打开 crontab 编辑器
crontab -e

# 添加以下行
0 3 * * 5 /root/logbak.sh

4. 一键部署 LNMP 环境

这个脚本用于一键部署 LNMP(Linux, Nginx, MySQL, PHP)环境。

#!/bin/bash
# 一键部署 LNMP(RPM 包版本)
# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源
yum -y install nginx
yum -y install mariadb-server mariadb-client
yum -y install php php-mysql
# 启动服务
systemctl start nginx mariadb
# 设置开机启动
systemctl enable nginx mariadb

5. 检查磁盘空间

这个脚本可以显示当前系统的磁盘使用情况。

#!/bin/bash
# 显示磁盘使用情况
df -h

6. 自动安装软件包

这个脚本可以根据提供的软件包列表自动安装所需的软件包。

#!/bin/bash
# 自动安装软件包
# 第一个参数是软件包列表,以逗号分隔
pkgs="$1"
for pkg in $(echo $pkgs | tr ',' ' '); do
    yum -y install $pkg
done

7. 文件查找与删除

这个脚本可以在指定目录中查找并删除特定类型的文件。

#!/bin/bash
# 查找并删除特定类型的文件
# 第一个参数是目录路径
# 第二个参数是文件扩展名
dir="$1"
ext="$2"
find "$dir" -type f -name "*.$ext" -delete

接下来 Shell 脚本应用案例,涵盖一些常见的系统管理和自动化任务。

8. 系统信息报告

这个脚本会收集系统的相关信息,如操作系统名称、内核版本、内存使用情况、磁盘空间等,并将这些信息打印出来。

#!/bin/bash
# 系统信息报告
echo "System Information Report:"
echo "---------------------------"
echo "Hostname: $(hostname)"
echo "OS: $(uname -s) $(uname -r)"
echo "Kernel Version: $(uname -v)"
echo "Memory Usage: $(free -m | grep Mem | awk '{print $3/$2 * 100.0"%"}')"
echo "Disk Space Usage: $(df -h | awk '/\/$/ {print $5}')"

9. 网络监控脚本

这个脚本每隔一分钟检查网络连接的状态,并记录到一个日志文件中。

#!/bin/bash
# 网络监控脚本
log_file="/var/log/network_monitor.log"

while true; do
    ping -c 1 google.com > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "$(date): Network is UP" >> $log_file
    else
        echo "$(date): Network is DOWN" >> $log_file
    fi
    sleep 60
done

10. 文件内容替换

这个脚本会在指定的文件中查找特定的字符串,并将其替换成新的字符串。

#!/bin/bash
# 文件内容替换
# 第一个参数是文件路径
# 第二个参数是旧字符串
# 第三个参数是新字符串
file_path="$1"
old_string="$2"
new_string="$3"

sed -i "s/$old_string/$new_string/g" "$file_path"

11. 系统服务管理

这个脚本可以启动、停止或重启指定的服务。

#!/bin/bash
# 系统服务管理
# 第一个参数是服务名称
# 第二个参数是操作 (start, stop, restart)

service_name="$1"
action="$2"

case $action in
    start)
        systemctl start $service_name
        ;;
    stop)
        systemctl stop $service_name
        ;;
    restart)
        systemctl restart $service_name
        ;;
    *)
        echo "Invalid action. Use start, stop, or restart."
        exit 1
        ;;
esac

12. 系统更新脚本

这个脚本会检查可用的软件包更新,并自动安装它们。

#!/bin/bash
# 系统更新脚本
# 使用 yum 更新系统
yum update -y

13. 备份数据库

这个脚本会备份指定的 MySQL 数据库,并将备份文件保存在一个指定的位置。

#!/bin/bash
# 备份 MySQL 数据库
# 第一个参数是数据库名称
# 第二个参数是数据库用户名
# 第三个参数是数据库密码
db_name="$1"
db_user="$2"
db_password="$3"
backup_dir="/var/backups/mysql"
backup_file="${backup_dir}/${db_name}-$(date +%Y%m%d%H%M%S).sql"

mysqldump -u $db_user -p$db_password $db_name > $backup_file

这些脚本覆盖了从简单的系统信息报告到复杂的网络监控和数据库备份等任务。

😍😍 海量H5小游戏、微信小游戏、Web casualgame源码😍😍
😍😍试玩地址: https://www.bojiogame.sg😍😍
😍看上哪一款,需要源码的csdn私信我😍

————————————————

​最后我们放松一下眼睛
在这里插入图片描述

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

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

相关文章

Nginx反向代理的使用场景

Nginx Vue使用npm命令打包:npm run build Nginx的定位:主要用于做反向代理,一般都是用它来做前端页面的服务器,动态资源代理到后端服务器。这样做的好处是可以避免跨域请求带来的不便。 我们知道,在前端我们开发的时…

三、AI工作流(低代码)的趋势即将崛起,输入-按钮组件详解,带你轻松玩转按钮组件

对工作流感兴趣的小伙伴可以去试一试。🔥偷偷的告诉你,它的GPTo4.0 不要💰。传送门:https://www.nyai.chat/chat?invitenyai_1141439 一、能用AI工作流介绍 能用AI-工作流是一个“低代码”工具、它也是个人或者中小企业的提效工…

C#语言基础速成Day07

“知止而后有定&#xff0c;定而后能静&#xff0c;静而后能安&#xff0c;安而后能虑&#xff0c;虑而后能得。” 目录 前言文章有误敬请斧正 不胜感恩&#xff01;||Day07 C#常见数据结构&#xff1a;1. 集合&#xff08;Collection&#xff09;1.1 **List<T>**1.2 **H…

MATLAB 样条插值

订阅专栏后,复制完整代码到MATLAB上面,即可获得跟本文相同的运行结果。 点击以下链接也可下载: https://download.csdn.net/download/callmeup/89635701 MATLAB插值代码 插值在MATLAB里面很简单,一个函数即可。 本文给出了已知点的坐标、待插值点的横坐标,可按要求插出来…

使用 Gradio 开发 ChatBot

Gradio 提供了 ChatInterface 组件&#xff0c;组件包括一个输入框、一个 ChatBox 区域、和一些按钮。同 interface&#xff0c;ChatInterface 通过一个处理函数进行处理&#xff0c;处理函数包括两个参数 message 和 history&#xff0c;message 是当前用户提交的问题&#xf…

[图解]需要≠需求-《分析模式》漫谈

1 00:00:00,760 --> 00:00:02,910 今天的《分析模式》漫谈 2 00:00:02,920 --> 00:00:04,180 我们来说一下 3 00:00:04,490 --> 00:00:06,490 需要不等于需求 4 00:00:10,490 --> 00:00:11,760 还是第一章 5 00:00:13,120 --> 00:00:15,020 这里 6 00:00:1…

[C#]实现GRPC通讯的服务端和客户端实例

最近要做两个软件之间消息的通讯&#xff0c;学习了一下GRPC框架的通讯。根据官方资料做了一个实例。 官方资料请参考&#xff1a;Create a .NET Core gRPC client and server in ASP.NET Core | Microsoft Learn 开发平台&#xff1a;Visual Studio 2022 开发前提条件&#x…

llama的神经网络结构;llama的神经网络结构中没有MLP吗;nanogpt的神经网络结构;残差是什么;残差连接:主要梯度消失

目录 解释代码 潜在问题和修正 结论 llama的神经网络结构 神经网络结构概述 举例说明 llama的神经网络结构中没有MLP吗 nanogpt的神经网络结构 1. 词嵌入层(Embedding Layer) 2. Transformer编码器层(Transformer Encoder Layer) 3. 层归一化(Layer Normalizat…

Linux文本处理常见工具

文章目录 文件内容查看查看文本文件内容cattacrevnl 查看非文本文件内容hexdumpodxxd 分页查看文件内容moreless 显示文本前后的行内容headtail文件描述符如果找到文件描述符 查看最新日志范例&#xff1a;找出IP地址的那一行 cut--按列抽取文本按分隔符按字符位置取网卡ip tr-…

Rocky系统部署k8s1.28.2单节点集群(Containerd)+Kuboard

目录 Kubernetes介绍 Kubernetes具备的功能 Kubernetes集群角色 Master管理节点组件 Node工作节点组件 非必须的集群插件 Kubernetes集群类型 Kubernetes集群规划 集群前期环境准备 开启Bridge网桥过滤 关闭SWAP交换分区 安装Containerd软件包 K8s集群部署方式 集…

关于归并排序:

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhttps%3A%2F return 语句开始之后&#xff0c;会执行之前剩余遗留下的语句和状态#include<bits/stdc.h> using namespace std…

Xilinx XAPP585相关

XAPP585中相关的状态机 第一个状态机&#xff1a;这里主要是在对时钟线延迟的基础上&#xff0c;通过BITSLIP操作&#xff0c;做时钟的对齐&#xff1b; 第二个状态机&#xff1a;这里对c_delay_in所做的操作&#xff0c;主要是对时钟线的延迟进行控制&#xff1b; delay_con…

远程代码执行漏洞

1.简介 远程代码执行(remote code execution)简称RCE&#xff0c;由于应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时&#xff0c;没有考虑用户是否控制这个字符串&#xff0c;则会导致代码执行漏洞的发生Webshell能够执行代码&#xff0c;本质上就是利用了…

新AI工程师Genie强势来袭,84秒解决代码问题

&#x1f989; AI新闻 &#x1f680; 新AI工程师Genie强势来袭&#xff0c;84秒解决代码问题 摘要&#xff1a;新兴AI软件工程师Genie因其超凡能力而引发关注&#xff0c;它在SWE-Bench排行榜上以30.07%的问题解决率远超第二名。Genie能模拟人类工程师的思维&#xff0c;自动…

CV党福音:YOLOv8实现语义分割(一)

前面我们得知YOLOv8不但可以实现目标检测任务&#xff0c;还包揽了分类、分割、姿态估计等计算机视觉任务。在上一篇博文中&#xff0c;博主已经介绍了YOLOv8如何实现分类&#xff0c;在这篇博文里&#xff0c;博主将介绍其如何将语义分割给收入囊中。 YOLOv8语义分割架构图 …

LeetCode - 54 - 螺旋矩阵

力扣54题 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 题解思路&#xff1a; 54题和59题 螺旋矩阵Ⅱ 有些微区别&#xff0c;59是nn的方形矩阵&#xff0c;但是54需要考虑行和列不相等的情况…

Webpack中搭建本地服务dev-server

开发过程中关于实现文件内容发生变化时&#xff0c;可监听文件变化内容、自动完成编译热更新&#xff0c;webpack提供了几种可选方式&#xff1a; 1. webpack watch mode监听文件变化 watch可在导出配置中添加或者在webpack 启动命令中添加--watch 注意&#xff1a;watch 的配…

武汉流星汇聚:跨境电商引领外贸增长新引擎,展望未来发展趋势

在过去的几年里&#xff0c;跨境电商如同一股强劲的东风&#xff0c;不仅为外贸增长注入了新的活力&#xff0c;更成为了引领全球贸易发展的新引擎。随着全球经济逐渐复苏&#xff0c;跨境电商行业正以惊人的速度迈向新的高度&#xff0c;展现出其作为外贸增长关键推动力的巨大…

面试题:什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?该如何应对这种情况?如何处理 Redis 的穿透?

面试题&#xff1a;什么是 Redis 的雪崩、穿透和击穿&#xff1f;Redis 崩溃之后会怎么样&#xff1f;该如何应对这种情况&#xff1f;如何处理 Redis 的穿透&#xff1f; 面试题面试官心理分析面试题剖析缓存雪崩缓存穿透缓存击穿 面试题 了解什么是 Redis 的雪崩、穿透和击穿…

python中的列表、元组、字典之间的区别

python列表 python列表是python中使用最频繁的数据类型。 列表可以完成大多数集合类的数据结构实现。它支持字符、数字、字符串甚至可以包含列表&#xff08;即嵌套&#xff09;。 列表用"[ ]"标识&#xff0c;是python最通用的复合数据类型。列表中值的切割也可以…