Linux常用Shell脚本珍藏
### Linux常用Shell脚本知识点详解 #### 一、文件类型判断与操作脚本 ##### 场景背景 在日常的Linux运维工作中,经常会遇到需要判断文件类型并进行相应操作的需求,比如判断某个文件是否为字符设备文件,并将其移动到特定目录。 ##### 脚本示例 ```bash #!/bin/sh FILENAME="" echo "Input filename:" read FILENAME if [ -c "$FILENAME" ]; # 判断文件是否为字符设备文件 then cp "$FILENAME" /dev # 如果是,则复制到/dev目录 fi ``` **知识点解析:** 1. **基本语法**: - `#!/bin/sh` 指定了脚本解释器为 `/bin/sh`,这是大多数Linux系统的默认shell。 - 变量定义:如 `FILENAME=""`,用于存储输入的文件名。 - 条件判断语句:`if [ -c "$FILENAME" ]`,`-c` 用于检查文件是否为字符设备文件。 - 文件操作命令:`cp "$FILENAME" /dev`,使用 `cp` 命令将文件复制到 `/dev` 目录。 2. **逻辑结构**: - 用户交互:通过 `echo` 和 `read` 实现用户输入提示及接收输入。 - 条件分支:使用 `if...then...fi` 结构实现逻辑判断。 3. **应用场景**: - 在自动化部署或维护过程中,对于特定类型的文件进行识别和处理,如设备文件、配置文件等。 #### 二、批量用户创建与管理脚本 ##### 场景背景 在Linux系统管理中,常常需要批量创建用户账户及其对应的主目录,并将其加入指定的用户组。 ##### 脚本示例 ```bash #!/bin/sh i=1 groupadd class1 # 创建用户组 while [ $i -le 30 ]; do if [ $i -le 9 ]; then USERNAME="stu0$i" else USERNAME="stu$i" fi useradd $USERNAME # 创建用户 mkdir /home/$USERNAME # 创建用户主目录 chown -R $USERNAME /home/$USERNAME # 设置用户为主目录所有者 chgrp -R class1 /home/$USERNAME # 将用户主目录加入指定用户组 i=$((i + 1)) done ``` **知识点解析:** 1. **基本语法**: - 循环结构:`while...do...done`,用于循环执行批量操作。 - 条件判断:`if...then...else...fi`,用于根据不同条件生成不同的用户名。 - 用户操作命令:`useradd`, `mkdir`, `chown`, `chgrp` 分别用于创建用户、创建目录、设置目录所有者以及修改目录所属组。 2. **逻辑结构**: - 初始化变量:`i=1`,用于计数。 - 用户名生成:根据用户数量动态生成不同的用户名。 3. **应用场景**: - 大规模用户创建场景,例如学校或企业内部用户的自动化创建和管理。 #### 三、批量账户删除脚本 ##### 场景背景 当不再需要某些用户时,可以通过脚本批量删除这些用户的账号。 ##### 脚本示例 ```bash #!/bin/sh i=1 while [ $i -le 50 ]; do userdel -r stud$i # 删除用户 i=$((i + 1)) done ``` **知识点解析:** 1. **基本语法**: - 循环结构:`while...do...done`。 - 用户删除命令:`userdel -r`,其中 `-r` 参数表示同时删除用户的主目录。 2. **逻辑结构**: - 初始化变量:`i=1`。 - 循环递增:`i=$((i + 1))`。 3. **应用场景**: - 当需要清理大量不再使用的用户账户时,可以使用此类脚本来提高效率。 #### 四、自动化任务脚本 ##### 场景背景 为了提高工作效率,系统管理员需要通过脚本自动化执行重复性的日常任务,如定时清理文件、数据备份等。 ##### 脚本示例 ```bash # 编写定时任务文件 50 16 * * * rm -r /abc/* # 删除/abc目录下的全部子目录和文件 0 8-18/1 * * * cut -f1 /xyz/x1 >> /backup/bak01.txt # 每小时读取/xyz目录下x1文件中每行第一个域的数据 50 17 * * * tar zcvf backup.tar.gz /data # 星期一下午5:50将/data目录下的所有目录和文件归档并压缩 55 17 * * * umount /dev/hdc # 下午5:55将IDE接口的CD-ROM卸载 # 使用crontab执行定时任务 crontab prgx ``` **知识点解析:** 1. **Cron定时任务**: - Cron 表达式格式:`分钟 小时 日 月 星期`。 - 常用命令:`rm`, `cut`, `tar`, `umount`。 - 特殊符号:`*` 表示任何值,`-` 表示范围,`,` 表示列表。 2. **逻辑结构**: - 定义定时任务:使用 `crontab` 命令来编辑定时任务文件。 - 任务调度:通过 cron 守护进程自动执行定时任务。 3. **应用场景**: - 自动化运维任务,如定期清理无用文件、数据备份、日志清理等。 #### 五、定期备份与压缩脚本 ##### 场景背景 在Linux系统管理中,定期对关键目录进行备份是非常重要的。例如,每个月的第一天备份并压缩 `/etc` 目录的所有内容,并保存到 `/root/bak` 目录。 ##### 脚本示例 ```bash #!/bin/sh DIRNAME=$(ls /root | grep bak) if [ -z "$DIRNAME" ]; then mkdir /root/bak cd /root/bak fi YY=$(date +%y) MM=$(date +%m) DD=$(date +%d) BACKETC="${YY}${MM}${DD}_etc.tar.gz" tar zcvf "$BACKETC" /etc echo "fileback finished!" ``` **知识点解析:** 1. **基本语法**: - 文件路径操作:`ls /root | grep bak`,用于检查目录是否存在。 - 日期获取:`date +%y`, `date +%m`, `date +%d`,分别获取当前的年、月、日。 - 文件压缩:`tar zcvf`,其中 `z` 表示使用 gzip 进行压缩。 2. **逻辑结构**: - 目录创建与切换:确保备份目录存在。 - 文件命名:根据当前日期生成备份文件名称。 3. **应用场景**: - 数据备份:适用于系统配置文件或其他关键数据的定期备份。 #### 六、定期文件备份脚本 ##### 场景背景 在实际应用中,有时需要定期备份某个目录下的文件,例如每周日凌晨零点零分定期备份 `/user/backup` 目录下的文件到 `/tmp`。 **示例代码**: ```bash echo "0 0 * * 0 /bin/sh /usr/bin/fileback" > /root/etcbakcron crontab /root/etcbakcron ``` **知识点解析:** 1. **Cron定时任务**: - 定义任务:`0 0 * * 0 /bin/sh /usr/bin/fileback` 表示每周日(星期天)凌晨零点零分执行 `/usr/bin/fileback` 脚本。 - 执行任务:通过 `crontab` 命令加载定时任务。 2. **逻辑结构**: - 任务定义:通过 Cron 表达式设置定时任务。 - 任务加载:使用 `crontab` 命令加载定时任务文件。 3. **应用场景**: - 自动化备份:适用于定期备份特定目录下的文件,确保数据安全。 通过以上分析,我们可以看到Shell脚本在Linux系统管理中扮演着非常重要的角色,无论是单个文件的处理、批量用户的创建与管理、还是自动化任务的执行,都能够大大提高工作效率。熟练掌握这些基础脚本的编写技巧对于Linux运维人员来说至关重要。
- yqmactest2015-11-18Linux常用Shell脚本珍藏内容很丰富,最可贵的是资源不需要很多积分
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助