Shell 编程
Bash 功能性语句
read
read 从标准输入读入一行, 并赋值给后面的变量, 其语法为:
read var
把读入的数据全部赋给 varread var1 var2 var3
把读入行中的第一个参数赋给 var1, 第二个参数赋给 var2, ……,把其余所有的参数赋给最后一个变量.
如果执行 read 语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行.
BASH
$ read name age[stdin] yilan 23$ echo "student $name is $age years old"[stdout] student yilan is 23 years
expr
算术运算命令 expr 主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作
BASH
$ expr 12 + 5 \* 3 # 反斜线去掉*号的元字符含义$ expr 25 % 4sum=`expr $num \* 6 ` # 反撇号引用命令的运行结果echo $sum
tput
tput —— terminal put 的简写,功能较多,主要用于设置终端工作模式, 或读出终端控制字符。 tput 命令与终端控制代码数据库 terminfo 相连, 根据 shell 环境变量 TERM 的值, 读出这种终端的指定功能控制代码。
BASH
tput clear
Bash 语法
常用系统变量
BASH
$0 当前shell程序的名字$1 ~ $9 命令行上的第一到第九个参数$# 命令行上的参数个数,不包含$0$* 命令行上的所有参数$@ 分别用双引号引用命令行上的所有参数$$ 当前进程的进程标识号(PID)$? 上一条命令的退出状态$! 最后一个后台进程的进程标识号
条件判断
if、else 和 elif 的基本语法:
BASH
# if 基本语法if [ condition ]; then # 如果条件为真,执行这里的代码fi# if-else 基本语法if [ condition ]; then # 如果条件为真,执行这里的代码else # 如果条件为假,执行这里的代码fi# if-elif-else 基本语法if [ condition1 ]; then # 如果 condition1 为真,执行这里的代码elif [ condition2 ]; then # 如果 condition1 为假,但 condition2 为真,执行这里的代码else # 如果 condition1 和 condition2 都为假,执行这里的代码fi
Bash 中的条件判断可以使用一系列的测试命令和运算符。以下是一些常用的条件判断方法:
字符串测试
BASH
-z STRING:如果字符串为空,则为真。-n STRING:如果字符串不为空,则为真。STRING1 = STRING2:如果两个字符串相等,则为真。STRING1 != STRING2:如果两个字符串不相等,则为真。
数值比较
BASH
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]]:如果字符串匹配正则表达式,则为真。
文件测试
BASH
-e FILE # 如果文件存在,则为真。-f FILE # 如果文件存在且是普通文件,则为真。-d FILE # 如果文件存在且是目录,则为真。-r FILE # 如果文件存在且可读,则为真。-w FILE # 如果文件存在且可写,则为真。-x FILE # 如果文件存在且可执行,则为真。
逻辑运算符
BASH
&& # 逻辑与|| # 逻辑或
循环语句
BASH
# for 循环:for (( counter=1; counter<=5; counter++ ))do echo "Welcome, this is iteration number $counter."done# while 循环: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# until 循环,与while类似until condition; do ... done# case语句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
Shell 编程