1. 变量命名规则
在Shell脚本编程中,变量命名需要遵循一定的规则:
- 1. 下划线命名法:使用下划线连接单词,如
user_name="admin" - 2. 驼峰命名法:
- 大驼峰(PascalCase):每个单词首字母大写,如
BigCity="shenzhen" - 小驼峰(camelCase):第一个单词首字母小写,后续单词首字母大写,如
bigCity="shenzhen"
- 大驼峰(PascalCase):每个单词首字母大写,如
重要限制:变量名首字母不允许使用数字和特殊符号。
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.sh4.2 条件判断(if语句)
if语句的条件可以是一个命令,如果命令执行成功(返回值为0),则条件为真:
1. 单分支
# 写法1 if 条件 ; then 命令 fi 写法2 if 条件 then 命令 fi2. 双分支
if 条件 ; then 命令1 else 命令2 fi3. 多分支
if 条件1 ; then 命令1 elif 条件2 ; then 命令2 elif 条件3 ; then 命令3 else 命令4 fi4.3 循环结构(for循环)
# 基本语法 for 变量 in 集合 do 命令 done 示例:批量创建用户 #!/bin/bash for2.sh for i in $@ do useradd $i done5. 实战案例:用户管理脚本
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" &>/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" >> "$output_file" done echo "用户名和密码已保存到 $output_file"执行示例:
[root@yourself myapp]# bash create_user_2.sh f z l cuser_pwd.txt文件内容示例:
f aB3xY7pQ9m z rT8kL2sN4v l mP5wZ9dF1c c jH6qX3bV8n6. 总结
本文涵盖了Shell脚本编程的核心知识点:
- 变量命名规范:下划线命名法和驼峰命名法的应用场景
- 变量作用域:局部变量与全局变量的区别,
export命令的使用 - 进程管理:进程与程序的区别,进程查看与终止方法
- 流程控制:位置变量、if条件判断、for循环的语法和应用
- 实战应用:用户管理脚本的编写,包括单个用户创建和批量用户创建
这些知识是Shell脚本编程的基础,掌握后可以编写出功能强大的自动化脚本,提高Linux系统管理效率。