Linux Shell脚本基础与Python环境部署
一、Shell 脚本基础语法1. Shell 脚本核心基础1.1 执行方式执行方式命令示例说明直接执行./test.sh需给脚本添加执行权限chmod x test.sh脚本首行需指定解释器#!/bin/bash解释器执行bash test.sh无需执行权限直接调用 bash 解释器运行导入执行source test.sh或. test.sh在当前 Shell 环境执行变量 / 函数可全局生效常用于环境配置脚本1.2 核心语法详解1变量#!/bin/bash # 【Shell变量基础示例】 # 1. 普通变量定义等号两侧无空格 TEST_DIR/opt/test_env # 测试环境根目录 PYTHON_VERSION3.10.12 # Python版本号 # 2. 命令替换获取命令执行结果 CURRENT_USER$(whoami) # 获取当前登录用户 SERVER_IP$(ifconfig eth0 | grep inet | awk {print $2}) # 获取网卡eth0的IP # 3. 变量引用$变量名 或 ${变量名}推荐后者避免歧义 echo 测试环境目录${TEST_DIR} echo 当前用户${CURRENT_USER} echo 服务器IP${SERVER_IP} # 4. 环境变量全局生效 export PATH${TEST_DIR}/bin:$PATH # 将测试环境bin目录加入系统PATH2条件判断#!/bin/bash # 【Shell条件判断示例测试环境检查】 TEST_DIR/opt/test_env PYTHON_BIN/usr/local/bin/python3.10 # 1. 文件/目录判断 if [ -d ${TEST_DIR} ]; then # -d判断是否为目录 echo ✅ 测试环境目录 ${TEST_DIR} 已存在 else echo ❌ 测试环境目录不存在正在创建... mkdir -p ${TEST_DIR} # -p递归创建目录父目录不存在则自动创建 fi # 2. 文件存在可执行判断 if [ -x ${PYTHON_BIN} ]; then # -x判断文件是否存在且可执行 echo ✅ Python3.10 可执行文件存在 else echo ❌ Python3.10 未安装或无执行权限 exit 1 # 退出脚本返回非0表示执行失败 fi # 3. 多条件判断且||或 if [ ${CURRENT_USER} root ] [ -w /usr/local ]; then # -w判断是否可写 echo ✅ 当前用户为root且/usr/local目录可写 else echo ❌ 请使用root用户执行该脚本 exit 1 fi3循环#!/bin/bash # 【Shell循环示例批量操作测试环境】 # 1. for循环批量创建测试用户 TEST_USERS(test01 test02 test03) # 测试用户列表 for user in ${TEST_USERS[]}; do # 遍历数组 id ${user} /dev/null # 检查用户是否存在/dev/null屏蔽输出 if [ $? -eq 0 ]; then # $?上一条命令的返回值0成功非0失败 echo 用户 ${user} 已存在跳过创建 else useradd ${user} # 创建用户 echo test123 | passwd --stdin ${user} # 设置密码免交互 echo ✅ 已创建测试用户${user} fi done # 2. while循环检查服务是否启动 SERVICE_NAMEnginx # 测试环境Nginx服务 COUNT0 MAX_RETRY5 # 最大重试次数 while [ ${COUNT} -lt ${MAX_RETRY} ]; do # -lt小于 systemctl is-active ${SERVICE_NAME} /dev/null if [ $? -eq 0 ]; then echo ✅ ${SERVICE_NAME} 服务已启动 break # 退出循环 else echo ⏳ 等待${SERVICE_NAME}启动...第${COUNT}次重试 sleep 2 # 休眠2秒 COUNT$((COUNT 1)) # 计数1 fi done if [ ${COUNT} -eq ${MAX_RETRY} ]; then echo ❌ ${SERVICE_NAME} 服务启动失败 exit 1 fi4函数#!/bin/bash # 【Shell函数示例测试环境通用工具函数】 # 1. 定义函数检查端口是否占用 check_port() { local PORT$1 # local局部变量仅函数内生效 local HOST$2 # 使用nc命令检查端口-z扫描端口-w超时时间 nc -z -w 3 ${HOST} ${PORT} /dev/null if [ $? -eq 0 ]; then echo ❌ 端口 ${HOST}:${PORT} 已被占用 return 1 # 函数返回失败 else echo ✅ 端口 ${HOST}:${PORT} 未被占用 return 0 # 函数返回成功 fi } # 2. 定义函数安装Python依赖 install_python_deps() { local REQUIREMENTS_FILE$1 if [ ! -f ${REQUIREMENTS_FILE} ]; then # -f判断是否为普通文件 echo ❌ 依赖文件 ${REQUIREMENTS_FILE} 不存在 return 1 fi echo 开始安装Python依赖... pip3 install -r ${REQUIREMENTS_FILE} -i https://pypi.tuna.tsinghua.edu.cn/simple if [ $? -eq 0 ]; then echo ✅ 依赖安装完成 return 0 else echo ❌ 依赖安装失败 return 1 fi } # 调用函数 check_port 8080 127.0.0.1 install_python_deps /opt/test_env/requirements.txt1.3 测试常用 Shell 脚本模板#!/bin/bash # 【测试环境批量操作模板批量执行远程命令】 # 脚本用途批量在多台测试服务器执行指定命令 # 使用方式./batch_execute.sh 要执行的命令 服务器列表文件 set -e # 脚本遇到错误返回非0立即退出 set -u # 引用未定义变量时报错 # 检查参数 if [ $# -ne 2 ]; then # $#参数个数 echo ❌ 使用方式错误正确用法$0 \command\ server_list_file echo 示例$0 \df -h\ /opt/server_list.txt exit 1 fi COMMAND$1 SERVER_FILE$2 # 检查服务器列表文件 if [ ! -f ${SERVER_FILE} ]; then echo ❌ 服务器列表文件 ${SERVER_FILE} 不存在 exit 1 fi # 遍历服务器列表执行命令 echo 开始在以下服务器执行命令${COMMAND} while read -r SERVER_IP; do # read -r读取行忽略反斜杠 # 跳过空行和注释行 if [[ -z ${SERVER_IP} || ${SERVER_IP} ~ ^# ]]; then continue fi echo -e \n 服务器 ${SERVER_IP} # 免密登录执行命令需提前配置SSH免密 ssh -o ConnectTimeout5 ${SERVER_IP} ${COMMAND} if [ $? -eq 0 ]; then echo ✅ ${SERVER_IP} 命令执行成功 else echo ❌ ${SERVER_IP} 命令执行失败 fi done ${SERVER_FILE} echo -e \n 批量命令执行完成2. Linux 下 Python 环境部署2.1 前置准备安装依赖# 1. 更新系统包CentOS/RHEL yum update -y # 安装编译Python所需的依赖 yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel # Ubuntu/Debian系统替换为 # apt update -y # apt install -y build-essential zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libffi-dev解释Python 源码编译需要依赖这些库如 openssl-devel 用于 SSL 支持libffi-devel 用于扩展模块缺失会导致安装后功能不全。2.2 下载并编译 Python# 1. 创建下载目录 mkdir -p /opt/python_install cd /opt/python_install # 2. 下载Python3.10.12可替换为其他版本 wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz # 若wget下载慢可换国内源https://mirrors.tuna.tsinghua.edu.cn/python/3.10.12/Python-3.10.12.tgz # 3. 解压 tar -zxvf Python-3.10.12.tgz cd Python-3.10.12 # 4. 配置编译参数关键 ./configure --prefix/usr/local/python3.10 \ # 指定安装目录 --enable-optimizations \ # 开启优化提升Python运行速度 --with-ssl # 强制链接系统SSL库解决pip报错 # 5. 编译并安装-j指定CPU核心数加速编译 make -j $(nproc) make install解释--prefix指定安装路径避免覆盖系统默认 Python系统默认 Python 可能被系统工具依赖不可修改--enable-optimizations通过编译优化提升 Python 性能make -j $(nproc)$(nproc)自动获取 CPU 核心数加速编译过程。2.3 配置软链接全局调用# 1. 创建python3和pip3软链接替换系统默认版本 ln -s /usr/local/python3.10/bin/python3.10 /usr/bin/python3 ln -s /usr/local/python3.10/bin/pip3.10 /usr/bin/pip3 # 2. 验证软链接 ls -l /usr/bin/python3 /usr/bin/pip3 # 输出示例lrwxrwxrwx 1 root root 30 Mar 8 10:00 /usr/bin/python3 - /usr/local/python3.10/bin/python3.10 # 3. 检查Python版本 python3 --version # 输出Python 3.10.12 pip3 --version # 输出pip 22.2.2 from /usr/local/python3.10/lib/python3.10/site-packages/pip (python 3.10)解释软链接相当于 Windows 的 “快捷方式”将 Python3.10 的可执行文件链接到/usr/bin系统默认 PATH 路径实现全局调用python3/pip3。2.4 配置 pip 国内源加速包安装# 1. 创建pip配置目录当前用户 mkdir -p ~/.pip # 2. 写入清华源配置 cat ~/.pip/pip.conf EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host pypi.tuna.tsinghua.edu.cn EOF # 3. 系统级配置所有用户生效 mkdir -p /etc/pip cat /etc/pip/pip.conf EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host pypi.tuna.tsinghua.edu.cn EOF # 验证安装一个包测试 pip3 install requests解释国内源清华 / 阿里 / 豆瓣比官方源快trusted-host解决 HTTPS 证书验证问题。2.5 环境验证脚本Python#!/usr/bin/env python3 # -*- coding: utf-8 -*- Python环境验证脚本 功能检查Python版本、pip源、第三方包安装是否正常 import sys import platform import requests def check_python_version(): 检查Python版本是否符合要求3.10 version sys.version_info if version (3, 10): print(f✅ Python版本符合要求{sys.version}) return True else: print(f❌ Python版本过低当前{sys.version}要求3.10) return False def check_pip_source(): 检查pip源是否为国内源 import configparser import os # 优先读取用户级配置 pip_conf os.path.expanduser(~/.pip/pip.conf) if not os.path.exists(pip_conf): pip_conf /etc/pip/pip.conf if not os.path.exists(pip_conf): print(⚠️ 未找到pip配置文件使用默认源) return False config configparser.ConfigParser() config.read(pip_conf) if index-url in config[global] and tsinghua in config[global][index-url]: print(✅ pip源已配置为清华源) return True else: print(⚠️ pip源未配置为国内源) return False def check_third_party_package(): 检查第三方包是否能正常导入 try: response requests.get(https://www.baidu.com, timeout5) if response.status_code 200: print(✅ 第三方包requests导入并使用正常) return True else: print(❌ requests请求失败) return False except Exception as e: print(f❌ 第三方包使用异常{e}) return False if __name__ __main__: print( Python环境验证开始 ) # 检查系统信息 print(f系统信息{platform.system()} {platform.release()}) # 执行所有检查 checks [ check_python_version, check_pip_source, check_third_party_package ] results [check() for check in checks] if all(results): print( Python环境验证通过 ) else: print( Python环境验证失败 ) sys.exit(1)3. 简单自动化脚本测试环境批量操作3.1 批量创建测试目录 文件#!/usr/bin/env python3 # -*- coding: utf-8 -*- 测试环境批量操作脚本 功能为多个测试用例创建独立的目录和配置文件 import os import sys import argparse def create_test_env(base_dir, case_num, clear_oldFalse): 创建测试环境目录结构 :param base_dir: 基础目录 :param case_num: 测试用例数量 :param clear_old: 是否清空旧目录 # 检查基础目录 if os.path.exists(base_dir): if clear_old: print(f️ 清空旧测试目录{base_dir}) # 递归删除目录谨慎使用 import shutil shutil.rmtree(base_dir) else: print(f⚠️ 基础目录已存在跳过创建{base_dir}) else: os.makedirs(base_dir, exist_okTrue) print(f✅ 创建基础目录{base_dir}) # 批量创建测试用例目录 for i in range(1, case_num 1): case_dir os.path.join(base_dir, ftest_case_{i:03d}) # 03d补零为3位001/002 os.makedirs(case_dir, exist_okTrue) # 创建配置文件 config_file os.path.join(case_dir, config.ini) with open(config_file, w, encodingutf-8) as f: f.write(f[test_config] case_id {i:03d} case_name test_case_{i:03d} env test server_ip 127.0.0.1 port {8080 i} ) print(f✅ 创建测试用例{i:03d}{case_dir}) if __name__ __main__: # 解析命令行参数 parser argparse.ArgumentParser(description测试环境批量创建脚本) parser.add_argument(--base-dir, default/opt/test_cases, help测试用例基础目录) parser.add_argument(--case-num, typeint, default10, help测试用例数量) parser.add_argument(--clear-old, actionstore_true, help是否清空旧目录) args parser.parse_args() # 执行创建 try: create_test_env(args.base_dir, args.case_num, args.clear_old) print(\n 测试环境创建完成) except Exception as e: print(f\n❌ 执行失败{e}) sys.exit(1)使用方式# 创建10个测试用例目录不清空旧目录 python3 create_test_env.py --case-num 10 # 创建20个测试用例目录清空旧目录 python3 create_test_env.py --base-dir /opt/new_test_cases --case-num 20 --clear-old3.2 批量检查测试服务状态#!/usr/bin/env python3 # -*- coding: utf-8 -*- 测试服务批量检查脚本 功能检查多台服务器的指定端口/服务是否正常 import socket import subprocess import time def check_port(host, port, timeout3): 检查端口是否可连接 :param host: 主机IP/域名 :param port: 端口号 :param timeout: 超时时间秒 :return: 成功返回True失败返回False try: sock socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout) result sock.connect_ex((host, port)) # 0成功非0失败 sock.close() return result 0 except Exception as e: print(f⚠️ 检查{host}:{port}异常{e}) return False def check_service(server_list, port_list): 批量检查服务器端口 :param server_list: 服务器列表 :param port_list: 端口列表 print( 测试服务状态检查 ) print(f检查时间{time.strftime(%Y-%m-%d %H:%M:%S)}) print(- * 50) for server in server_list: print(f服务器{server}) for port in port_list: if check_port(server, port): print(f ✅ {port}端口正常) else: print(f ❌ {port}端口异常) print(- * 50) if __name__ __main__: # 测试服务器列表可从文件读取 SERVER_LIST [127.0.0.1, 192.168.1.100, 192.168.1.101] # 测试端口列表对应不同测试服务 PORT_LIST [8080, 8081, 8082, 9000] # 执行检查 check_service(SERVER_LIST, PORT_LIST)4. Linux 全模块复盘Docker/K8s 前置基础核心模块关键知识点与 Docker/K8s 的关联文件系统1. 目录结构/etc//var//usr//opt/2. 权限管理chmod/chown/chgrp3. 软链接 / 硬链接Docker 镜像基于 Linux 文件系统K8s 挂载卷需理解目录权限进程管理1. ps/top/pstree 查看进程2. kill/systemctl 管理进程3. 后台运行/nohup/screenDocker 容器本质是单进程K8s 管理 Pod容器组进程生命周期网络配置1. IP / 子网 / 网关配置2. 端口监听netstat/ss3. 防火墙iptables/firewalld4. SSH 免密登录Docker 网络模式桥接 / 宿主 / 容器K8s Service/Ingress/NetworkPolicy包管理1. YUM/APT 安装软件2. 源码编译安装3. RPM/DEB 包管理Docker 镜像构建安装依赖K8s 容器镜像打包存储管理1. 磁盘挂载mount/umount2. 分区fdisk3. 卷LVMDocker 数据卷VolumeK8s PV/PVC 存储持久化环境变量1. export 设置环境变量2. /etc/profile/~/.bashrc 配置Docker run -e 传递环境变量K8s ConfigMap/Secret 管理配置二、总结核心要点回顾Shell 脚本掌握变量普通 / 命令替换 / 环境变量、条件判断文件 / 多条件、循环for/while、函数局部变量 / 返回值可编写批量操作测试环境的脚本如批量执行命令、检查服务。Python 环境部署Linux 下通过源码编译安装指定路径避免覆盖系统 Python配置软链接实现全局调用修改 pip 源加速包安装通过验证脚本确认环境可用性。自动化脚本Python 可编写批量创建测试目录、检查服务状态的脚本结合参数解析提升脚本灵活性满足测试环境批量操作需求。Linux 复盘重点掌握文件系统、进程、网络、存储、环境变量核心知识点这些是 Docker/K8s 理解容器 / 集群运行机制的基础。

相关新闻

超实用!AI专著生成工具大揭秘,助你轻松打造专业学术专著

超实用!AI专著生成工具大揭秘,助你轻松打造专业学术专著

学术专著的真正价值源于其系统化的内容与严密的逻辑结构,但正是这种需求常常成为写作过程中的一大挑战。与聚焦单一议题的期刊论文不同,专著需要建立一个涵盖绪论、理论基础、核心研究、应用拓展及结论的全面框架,确保各个章节逐步引导、相互…

2026/7/2 20:18:56 阅读更多 →
‌高压电场本身不会主动“耗电”,但维持该电场所需的设备(如电源、电极系统等)在运行过程中会消耗电能‌。是否耗电以及耗电量大小,取决于具体应用场景和系统效率。-耗电几乎可以忽略不计

‌高压电场本身不会主动“耗电”,但维持该电场所需的设备(如电源、电极系统等)在运行过程中会消耗电能‌。是否耗电以及耗电量大小,取决于具体应用场景和系统效率。-耗电几乎可以忽略不计

高压电场会耗电吗 会的。高压电场是会耗电的,但耗电多少取决于电流大小。⚡ 核心关系是电功率公式: P=UIP = UIP=UI 其中 PPP:功率(W) UUU:电压(V) III:电流(A) 也就是说: 耗不耗电不是看电压高不高,而是看电流大不大。 1️⃣ 只有电场但几乎没有电流 → …

2026/7/3 8:11:55 阅读更多 →
基于双二阶广义积分器的软件锁相环仿真模型-不对称工况下的DSOGI-SPLL对比及适用于并网逆...

基于双二阶广义积分器的软件锁相环仿真模型-不对称工况下的DSOGI-SPLL对比及适用于并网逆...

基于双二阶广义积分器的软件锁相环仿真模型 DSOGI-SPLL 给出了不对称工况下的对比结果 不仅有sogi 还有srf pll 适用于并网逆变器、微电网、三相VSR等应用,通过自适应滤波器的设计,实现无静差跟踪三相电压频率和相位。在电力电子和电力系统领域&#xff…

2026/5/17 10:27:17 阅读更多 →

最新新闻

养生科普|从“泄阳”到“扶阳”,新式正气罐凭什么革新传统拔罐体系

养生科普|从“泄阳”到“扶阳”,新式正气罐凭什么革新传统拔罐体系

拔罐作为传承千年的中医外治技法,凭借疏通经络、排散寒湿的作用,一直是大众主流的养生方式。但传统拔罐的固有短板,始终制约着常态化养护:冷负压强行吸附易耗损人体正气,术后毛孔完全张开,极易受风受寒&…

2026/7/3 8:12:18 阅读更多 →
OpenModScan:开源免费的Modbus调试利器,让工业通讯调试变得简单高效

OpenModScan:开源免费的Modbus调试利器,让工业通讯调试变得简单高效

OpenModScan:开源免费的Modbus调试利器,让工业通讯调试变得简单高效 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 还在为工业设备通讯调试而烦…

2026/7/3 8:06:15 阅读更多 →
企业内部 Copilot 为什么容易答错:从文档 RAG 到可信上下文层

企业内部 Copilot 为什么容易答错:从文档 RAG 到可信上下文层

企业内部 Copilot 为什么容易答错:从文档 RAG 到可信上下文层 过去两年,大量企业开始构建自己的内部 Copilot。最常见的做法是将企业文档接入大模型,让员工用自然语言提问。销售可以问“最新产品报价政策是什么”,客服可以问“这个…

2026/7/3 8:06:15 阅读更多 →
暗黑破坏神2存档编辑器:零基础修改角色装备的完整指南

暗黑破坏神2存档编辑器:零基础修改角色装备的完整指南

暗黑破坏神2存档编辑器:零基础修改角色装备的完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2存档编辑器(d2s-editor)是一款专为暗黑破坏神2玩家设计的强大工具&#xff0…

2026/7/3 8:06:15 阅读更多 →
中国1951-2025年光热同期指数数据集

中国1951-2025年光热同期指数数据集

本数据集基于1951-2025年中国陆地区域统一网格气象资料,生成光热同期指数逐年栅格产品。数据覆盖中国陆地区域,空间分辨率约1千米,采用统一投影、统一掩膜和统一缺测值规则组织。该指标用于刻画农业气候资源中的光热同期指数空间格局和年际变…

2026/7/3 8:04:14 阅读更多 →
Qt QSS 完全入门写出漂亮界面以及解决样式不生效问题

Qt QSS 完全入门写出漂亮界面以及解决样式不生效问题

一、Qt QSS 完全入门写出漂亮界面 很多刚接触 Qt 的开发者都有一个共同的感受:功能很快就写出来了,但是界面总感觉像十年前的软件。按钮灰扑扑、输入框方方正正、菜单毫无质感,与如今的软件相比差距明显。实际上,并不是 Qt 做不了…

2026/7/3 8:04:14 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻