1. 首页 > Linux教程 > 正文

Linux教程FG393-Shell脚本开发基础

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

本文档介绍Shell脚本开发的基础知识和实践方法。更多学习教程公众号风哥教程itpux_com

Part01-Shell脚本基础

1.1 脚本结构

# 创建第一个Shell脚本
[root@linux ~]# cat > /fglinux/hello.学习交流加群风哥QQ113257174sh << 'EOF' #!/bin/bash # hello.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn echo "Hello, Linux Shell!" echo "当前用户: $(whoami)" echo "当前目录: $(pwd)" echo "系统时间: $(date)" EOF # 添加执行权限 [root@linux ~]# chmod +x /fglinux/hello.sh # 执行脚本 [root@linux ~]# /fglinux/hello.sh Hello, Linux Shell! 当前用户: root 当前目录: /root 系统时间: Fri Apr 4 00:40:00 CST 2026 # 变量定义与使用 [root@linux ~]# cat> /fglinux/variables.sh << 'EOF' #!/bin/bash # variables.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 定义变量 NAME="风哥" AGE=30 CITY="北京" # 使用变量 echo "姓名: $NAME" echo "年龄: $AGE" echo "城市: $CITY" # 系统变量 echo "Shell: $SHELL" echo "Home: $HOME" echo "PATH: $PATH" echo "用户: $USER" echo "主机名: $HOSTNAME" # 特殊变量 echo "脚本名称: $0" echo "参数个数: $#" echo "所有参数: $@" echo "进程ID: $$" EOF [root@linux ~]# chmod +x /fglinux/variables.sh [root@linux ~]# /fglinux/variables.sh arg1 arg2 姓名: 风哥 年龄: 30 城市: 北京 Shell: /bin/bash Home: /root PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 用户: root 主机名: linux.fgedu.net.cn 脚本名称: /fglinux/variables.sh 参数个数: 2 所有参数: arg1 arg2 进程ID: 12345

1.2 条件判断

# if条件判断
[root@linux ~]# cat > /fglinux/condition.sh << 'EOF' #!/bin/bash # condition.学习交流加群风哥微信: itpux-comsh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 数字比较 A=10 B=20 if [ $A -lt $B ]; then echo "$A 小于 $B" elif [ $A -eq $B ]; then echo "$A 等于 $B" else echo "$A 大于 $B" fi # 字符串比较 STR1="hello" STR2="world" if [ "$STR1"="$STR2" ]; then echo "字符串相等" else echo "字符串不相等" fi # 文件判断 FILE="/etc/passwd" if [ -f "$FILE" ]; then echo "$FILE 是普通文件" fi if [ -r "$FILE" ]; then echo "$FILE 可读" fi if [ -w "$FILE" ]; then echo "$FILE 可写" fi # 目录判断 DIR="/var/log" if [ -d "$DIR" ]; then echo "$DIR 是目录" fi # 多条件判断 if [ -f "/etc/passwd" ] && [ -r "/etc/passwd" ]; then echo "文件存在且可读" fi if [ -f "/etc/shadow" ] || [ -f "/etc/passwd" ]; then echo "至少有一个文件存在" fi EOF [root@linux ~]# chmod +x /fglinux/condition.sh [root@linux ~]# /fglinux/condition.sh 10 小于 20 字符串不相等 /etc/passwd 是普通文件 /etc/passwd 可读 /etc/passwd 可写 /var/log 是目录 文件存在且可读 至少有一个文件存在

Part02-循环结构

2.1 for循环

# for循环示例
[root@linux ~]# cat > /fglinux/for_loop.sh << 'EOF' #!/bin/bash # for_loop.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 列表循环 echo "=== 列表循环 ===" for i in 1 2 3 4 5; do echo "数字: $i" done # 范围循环 echo "=== 范围循环 ===" for i in {1..5}; do echo "计数: $i" done # 步长循环 echo "=== 步长循环 ===" for i in {1..10..2}; do echo "奇数: $i" done # C风格循环 echo "=== C风格循环 ===" for ((i=1; i<=5; i++)); do echo "迭代: $i" done # 遍历文件 echo "=== 遍历文件 ===" for file in /var/log/*.log; do echo "文件: $file" done # 遍历目录 echo "=== 遍历目录 ===" for dir in /etc/*/; do echo "目录: $dir" done # 遍历命令输出 echo "=== 遍历命令输出 ===" for user in $(cut -d: -f1 /etc/passwd | head -5); do echo "用户: $user" done EOF [root@linux ~]# chmod +x /fglinux/for_loop.sh [root@linux ~]# /fglinux/for_loop.sh===列表循环===数字: 1 数字: 2 数字: 3 数字: 4 数字: 5===范围循环===计数: 1 计数: 2 计数: 3 计数: 4 计数: 5===步长循环===奇数: 1 奇数: 3 奇数: 5 奇数: 7 奇数: 9===C风格循环===迭代: 1 迭代: 2 迭代: 3 迭代: 4 迭代: 5===遍历文件===文件: /var/log/boot.log 文件: /var/log/dnf.log 文件: /var/log/messages===遍历目录===目录: /etc/ssh/ 目录: /etc/sysconfig/ 目录: /etc/systemd/===遍历命令输出===用户: root 用户: bin 用户: daemon 用户: adm 用户: lp

2.2 while和until循环

# while和until循环
[root@linux ~]# cat > /fglinux/while_loop.sh << 'EOF' #!/bin/bash # while_loop.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # while循环 echo "=== while循环 ===" COUNT=1 while [ $COUNT -le 5 ]; do echo "计数: $COUNT" COUNT=$((COUNT + 1)) done # 读取文件 echo "=== 读取文件 ===" while read line; do echo "行内容: $line" done < /etc/hosts # until循环 echo "=== until循环 ===" NUM=1 until [ $NUM -gt 5 ]; do echo "数字: $NUM" NUM=$((NUM + 1)) done # 死循环与break echo "=== 死循环控制 ===" while true; do read -p "请输入数字(0退出): " num if [ "$num"="0" ]; then echo "退出循环" break fi echo "你输入的是: $num" done # continue跳过 echo "=== continue示例 ===" for i in {1..10}; do if [ $((i % 2)) -eq 0 ]; then continue fi echo "奇数: $i" done EOF [root@linux ~]# chmod +x /fglinux/while_loop.sh [root@linux ~]# echo -e "1\n0" | /fglinux/while_loop.更多视频教程www.fgedu.net.cnsh===while循环===计数: 1 计数: 2 计数: 3 计数: 4 计数: 5===读取文件===行内容: 127.0.0.1 localhost localhost.localdomain 行内容: ::1 localhost localhost.localdomain 行内容: 192.168.1.10 linux.fgedu.net.cn linux===until循环===数字: 1 数字: 2 数字: 3 数字: 4 数字: 5
风哥针对Shell脚本开发建议:

  • 使用#!/bin/bash指定解释器
  • 添加脚本说明注释
  • 变量名使用大写字母
  • 使用双引号保护变量
  • 添加错误处理机制

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息