placeholderShell 编程

Shell 编程

常用命令

readexprtput 等都是 Linux 系统上的外部命令,可以在各种 Shell 脚本中调用。

read

read 从标准输入读取一行并赋值给变量。支持多个选项控制读取行为。

常用选项:

-p "prompt"   # 显示提示信息-s            # 静默模式,不显示输入-t seconds    # 超时时间-n chars      # 读取指定字符数后返回
read var# 将读入的全部数据赋给 var
read var1 var2 var3# 第一个参数赋给 var1,第二个赋给 var2,其余参数赋给最后一个变量
read -p "Enter your name: " nameecho "Hello, $name"

如果执行 read 时标准输入无数据,程序会等待数据输入或被终止。

示例:

$ read name age[stdin] yilan 23$ echo "student $name is $age years old"[stdout] student yilan is 23 years old

tput

tput (terminal put) 用于终端控制,可以设置光标位置、颜色、清屏等。它与终端控制代码数据库 terminfo 相连,根据 TERM 环境变量值读取相应终端的控制代码。

常用功能:

tput clear           # 清屏tput cup row col     # 移动光标到指定位置tput bold            # 粗体文本tput smso            # 启动突出显示tput rmso            # 结束突出显示tput sgr0            # 重置所有属性tput cols            # 输出终端列数tput lines           # 输出终端行数

Bash 语法

常用系统变量

$0      # 当前 shell 程序的名字$1-$9   # 命令行上的第一到第九个参数$#      # 命令行上的参数个数(不包含 $0)$*      # 命令行上的所有参数$@      # 分别用双引号引用命令行上的所有参数$$      # 当前进程的进程标识号 (PID)$?      # 上一条命令的退出状态$!      # 最后一个后台进程的进程标识号

Bash 特殊字符

Bash 中使用多种括号和特殊字符,理解它们的含义和用法非常重要。

命令替换

`command`      # 反撇号,引用命令的运行结果$(command)     # $() 语法,功能与反撇号相同,更推荐使用

条件测试

[ string ]     # 传统条件测试,两侧必须保留空格[[ string ]]   # Bash 扩展条件测试,两侧保留空格,支持模式匹配

算术运算

(( expr ))     # 算术运算,无需转义 *  /

分组与代码块

(command)      # 在子 shell 中执行{ command; }   # 在当前 shell 中执行,command 后的分号和空格不可省略

条件判断

注意: [ condition ] 中的方括号两侧必须保留空格,否则条件测试无法正确执行。

ifelseelif 的基本语法:

if [ condition ]; then    # 条件为真时执行的代码fi
if [ condition ]; then    # 条件为真时执行的代码else    # 条件为假时执行的代码fi
if [ condition1 ]; then    # condition1 为真时执行elif [ condition2 ]; then    # condition1 为假但 condition2 为真时执行else    # 所有条件都为假时执行fi

字符串测试

-z STRING       # 如果字符串为空,则为真-n STRING       # 如果字符串不为空,则为真STRING1 = STRING2   # 如果两个字符串相等,则为真STRING1 != STRING2  # 如果两个字符串不相等,则为真

数值比较

NUM1 -eq NUM2   # 如果两个数字相等,则为真NUM1 -ne NUM2   # 如果两个数字不相等,则为真NUM1 -gt NUM2   # 如果 NUM1 大于 NUM2,则为真NUM1 -ge NUM2   # 如果 NUM1 大于或等于 NUM2,则为真NUM1 -lt NUM2   # 如果 NUM1 小于 NUM2,则为真NUM1 -le NUM2   # 如果 NUM1 小于或等于 NUM2,则为真[[ $string =~ regex ]]  # 如果字符串匹配正则表达式,则为真

文件测试

-e FILE   # 如果文件存在,则为真-f FILE   # 如果文件存在且是普通文件,则为真-d FILE   # 如果文件存在且是目录,则为真-r FILE   # 如果文件存在且可读,则为真-w FILE   # 如果文件存在且可写,则为真-x FILE   # 如果文件存在且可执行,则为真

逻辑运算符

&&   # 逻辑与||   # 逻辑或

循环语句

for (( counter=1; counter<=5; counter++ ))do    echo "Welcome, this is iteration number $counter."done
counter=0# 循环直到用户输入的数字等于 5while [ $counter -ne 5 ]; do    echo "Enter a number (current count: $counter)"    read input_number    # 检查输入是否为数字    if ! [[ "$input_number" =~ ^[0-9]+$ ]]; then        echo "Error: Please enter a valid number."        continue  # 如果输入无效,跳过当前循环的剩余部分    fi    # 将输入的数字赋值给计数器    counter=$input_number    # 打印当前计数器的值    echo "You entered: $counter"done
echo "Enter a number between 1 and 3:"read numbercase $number in    1) echo "You entered one.";;    2) echo "You entered two.";;    3) echo "You entered three.";;    *) echo "You did not enter a number between 1 and 3.";;esac

Author

GnixAij

Posted

2024-06-19

Updated

2026-01-27

License