news 2026/7/22 7:04:34

Shell脚本编程基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell脚本编程基础

1. 变量命名规则

在Shell脚本编程中,变量命名需要遵循一定的规则:

  • 1. 下划线命名法:使用下划线连接单词,如user_name="admin"
  • 2. 驼峰命名法
    • 大驼峰(PascalCase):每个单词首字母大写,如BigCity="shenzhen"
    • 小驼峰(camelCase):第一个单词首字母小写,后续单词首字母大写,如bigCity="shenzhen"

重要限制:变量名首字母不允许使用数字和特殊符号。

2. 变量作用域与全局变量

Shell中的变量默认只在当前Shell进程中有效:

[root@yourself ~]# a=10 [root@yourself ~]# echo $a 10 [root@yourself ~]# bash # 开启一个子进程 [root@yourself ~]# echo $a # 子进程中无法访问父进程变量 [root@yourself ~]# exit # 退出子进程 exit [root@yourself ~]# export a # 将a输出为全局变量 [root@yourself ~]# bash [root@yourself ~]# echo $a 10 # 现在子进程可以访问了

3. 进程管理基础

进程(Process)程序(Program)的区别:

  • 程序:实现某些功能的代码(code)→ 静态的
  • 进程:正在运行的程序 → 动态的,消耗CPU和内存、对磁盘进行读写,或在网络上收发数据

sshd是Linux系统中负责远程登录的程序→进程。

3.1 查看进程

[root@yourself ~]# pstree -p # 查看进程的编号(pid) [root@yourself ~]# echo $$ # 查看当前bash进程的编号

3.2 创建与终止进程

示例:创建一个简单的C程序并运行:

#include <stdio.h> #include <unistd.h> int main() { while (1) { printf("hello,world\n"); sleep(1); } return 0; }

编译运行后,可以通过pstree -p查看进程树,找到进程ID后终止:

[root@feng myapp]# kill -9 2632 # 杀死进程

4. Shell脚本流程控制

4.1 位置变量

位置变量用于接收脚本参数:

#!/bin/bash # pos.sh echo "第1个位置变量 $1" echo "第2个位置变量 $2" echo "第3个位置变量 $3" echo "第4个位置变量 $4" echo "第5个位置变量 $5" echo "一共有 $# 个位置变量" echo "所有的位置变量的内容是 $@" echo "所有的位置变量的内容是 $*" echo "脚本名是 $0"

执行结果:

[root@yourself myapp]# bash pos.sh f z l c h w 第1个位置变量 f 第2个位置变量 z 第3个位置变量 l 第4个位置变量 c 第5个位置变量 h 一共有 6 个位置变量 所有的位置变量的内容是 f z l c h w 所有的位置变量的内容是 f z l c h w 脚本名是 pos.sh

4.2 条件判断(if语句)

if语句的条件可以是一个命令,如果命令执行成功(返回值为0),则条件为真:

1. 单分支

# 写法1 if 条件 ; then 命令 fi 写法2 if 条件 then 命令 fi

2. 双分支

if 条件 ; then 命令1 else 命令2 fi

3. 多分支

if 条件1 ; then 命令1 elif 条件2 ; then 命令2 elif 条件3 ; then 命令3 else 命令4 fi

4.3 循环结构(for循环)

# 基本语法 for 变量 in 集合 do 命令 done 示例:批量创建用户 #!/bin/bash for2.sh for i in $@ do useradd $i done

5. 实战案例:用户管理脚本

5.1 创建用户并设置密码

需求:编写脚本create_user.sh,实现创建用户并设置密码的功能:

  • 如果用户存在,提示用户已存在,然后重新设置密码
  • 如果用户不存在,则新建用户,然后设置密码
  • 最后提示操作结果
#!/bin/bash # create_user.sh if id $1 &>/dev/null ; then echo "$1 用户已存在" echo "$1:$2" | chpasswd else useradd $1 echo "$1:$2" | chpasswd echo "新建用户$1成功" fi

执行示例:

[root@yourself myapp]# bash create_user.sh qiqiqi2 123456 新建用户qiqiqi2成功 [root@yourself myapp]# bash create_user.sh qiqiqi2 123456 qiqiqi2 用户已存在

5.2 批量创建用户并生成随机密码

需求:编写脚本create_user_2.sh,批量新建用户并生成随机密码:

  • 如果用户存在,提示用户已经存在,然后重新设置密码为随机密码(10个字符)
  • 如果用户不存在,就新建用户,设置密码为随机密码(10个字符)
  • 将用户名和密码保存到文件user_pwd.txt
#!/bin/bash # create_user_2.sh output_file="user_pwd.txt" 清空或创建输出文件 > "$output_file" for username in "$@" do # 生成10位随机密码(包含字母和数字) random_password=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c10) if id "$username" &amp;&gt;/dev/null ; then echo "$username 用户已存在,重置密码" echo "$username:$random_password" | chpasswd else useradd "$username" echo "$username:$random_password" | chpasswd echo "新建用户 $username 成功" fi 保存到文件 echo -e "$username\t$random_password" &gt;&gt; "$output_file" done echo "用户名和密码已保存到 $output_file"

执行示例:

[root@yourself myapp]# bash create_user_2.sh f z l c

user_pwd.txt文件内容示例:

f aB3xY7pQ9m z rT8kL2sN4v l mP5wZ9dF1c c jH6qX3bV8n

6. 总结

本文涵盖了Shell脚本编程的核心知识点:

  1. 变量命名规范:下划线命名法和驼峰命名法的应用场景
  2. 变量作用域:局部变量与全局变量的区别,export命令的使用
  3. 进程管理:进程与程序的区别,进程查看与终止方法
  4. 流程控制:位置变量、if条件判断、for循环的语法和应用
  5. 实战应用:用户管理脚本的编写,包括单个用户创建和批量用户创建

这些知识是Shell脚本编程的基础,掌握后可以编写出功能强大的自动化脚本,提高Linux系统管理效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 7:02:14

虚拟歌手60fps高清MV制作:技术实现与本地部署全解析

这次我们来看一个高清60fps的虚拟歌手音乐视频项目&#xff0c;重点分析其技术实现和本地部署的可能性。这个由謎J_official创作的《怪盗哈奇先生》MV&#xff0c;以巡音ルカ为主角&#xff0c;展现了当前虚拟歌手内容制作的技术水准。从技术角度看&#xff0c;这类项目涉及视频…

作者头像 李华
网站建设 2026/7/22 7:00:23

C++函数重载匹配规则详解:从隐式转换到模板特化的优先级解析

1. 项目概述&#xff1a;为什么函数重载的匹配规则值得深究&#xff1f;在C的日常开发中&#xff0c;函数重载&#xff08;Function Overloading&#xff09;几乎是每个开发者都会用到的特性。它允许我们在同一作用域内定义多个同名函数&#xff0c;只要它们的参数列表&#xf…

作者头像 李华
网站建设 2026/7/22 6:59:59

纪录片预告片制作技术全解析:从素材处理到多平台输出

最近在关注国内独立电影的朋友们可能注意到了第二十届FIRST青年电影展的主竞赛入围作品《从来》&#xff0c;这部纪录长片以其独特的视角和真实的力量吸引了众多影迷的关注。作为技术博主&#xff0c;今天我们不讨论电影的艺术价值&#xff0c;而是从技术角度深入分析预告片的制…

作者头像 李华
网站建设 2026/7/22 6:57:06

校园摄影作品人气评选活动策划与实施指南

校园中处处充满值得记录的瞬间——晨光中的教学楼、运动场上的青春身影、图书馆里的专注侧影……将这些美好定格并分享&#xff0c;是校园文化的重要组成部分。组织一场校园优秀摄影作品人气评选活动&#xff0c;不仅能激发学生的创作热情&#xff0c;还能有效增强校园凝聚力与…

作者头像 李华
网站建设 2026/7/22 6:56:58

构建交互式推理系统:从数据模型到推理引擎的实践指南

在实际游戏开发或剧情设计中&#xff0c;构建一个“矩阵陨落”这类宏大世界观的时间线&#xff0c;并融入“虚构推理”元素&#xff0c;是一项极具挑战性的任务。它要求开发者或创作者不仅要搭建清晰的历史脉络&#xff0c;还要设计一套允许玩家或读者通过逻辑推演来揭示真相的…

作者头像 李华
网站建设 2026/7/22 6:56:19

振幅调制电路的设计与仿真

多种振幅调制电路的仿真与设计第2章 振幅调制基本原理2.1 振幅调制的数学本质振幅调制属于线性频谱搬移技术&#xff0c;其核心是通过低频调制信号控制高频载波的振幅&#xff0c;使载波振幅随调制信号的瞬时值线性变化&#xff0c;从而将低频信号的频谱搬移到高频载波两侧&…

作者头像 李华