#!/bin/bash # 浮动点数除法,scale为设置小数点后几位,sqrt为计算平方根 result=$(echo"scale=2;sqrt(64)"| bc -l) echo"64的算数平方根为$result" ```bash #!/bin/bash # 浮动点数除法,scale为设置小数点后几位,sqrt为计算平方根 result=$(echo"scale=2;sqrt(64)"| bc -l) echo"64的算数平方根为$result"
配合bc的-q参数运算后不显示提示符,即运算后不弹窗
echo"scale=2; 5/7" | bc -q ```bash echo"scale=2; 5/7" | bc -q
用户交互与关系运算符
用户交互
意味可以过脚本与用户进行输入和输出的交互。通过提示用户输入信息,并根据用户输入执行相应的操作。
基本交互
通过read命令来获取用户输入的参数,如读取多个变量则需要使用空格来分隔
#!/bin/bash echo"请输入你的名字和年龄:" #依次将输入的内容赋值给变量 read name age echo"你的名字是:$name,年龄是:$age" ```bash #!/bin/bash echo"请输入你的名字和年龄:" #依次将输入的内容赋值给变量 read name age echo"你的名字是:$name,年龄是:$age"
提示交互
通过read命令来获取用户输入的参数-p来提供输入前的提示信息
#!/bin/bash read -p "请输入你的名字:" name read -p "请输入你的年龄:" age
echo"你的名字是:$name,年龄是:$age" ```bash #!/bin/bash read -p "请输入你的名字:" name read -p "请输入你的年龄:" age
echo"你的名字是:$name,年龄是:$age"
read全部参数
不同参数之间可以配合使用,例如设置隐藏输入内容和提示信息可以使用-ps
参数
说明
-p
提示用户输入,后面跟提示信息。
-s
隐藏输入内容(常用于输入密码)。
-t
设置超时,单位为秒,超时后返回非零值。
-i
设置默认值,如果用户没有输入,则使用默认值。
-r
不处理反斜杠(\)转义字符,输入会原样保存。
-a
将输入保存为数组,按空格或换行分割。
-n
读取指定的字符数,限制用户输入的字符长度。
菜单交互
基本语法
select variable in option1 option2 option3 ...; do # 对应的操作 done ```bash select variable in option1 option2 option3 ...; do # 对应的操作 done
# 旧语法 - 使用 -a if [ "$x" -gt 3 -a "$y" -lt 10 ]; then echo"x 大于 3 且 y 小于 10" else echo"条件不成立" fi
# 现代语法 - 使用 && if [ "$x" -gt 3 ] && [ "$y" -lt 10 ]; then echo"x 大于 3 且 y 小于 10" else echo"条件不成立" fi
```bash #!/bin/bash
x=5 y=8
# 旧语法 - 使用 -a if [ "$x" -gt 3 -a "$y" -lt 10 ]; then echo"x 大于 3 且 y 小于 10" else echo"条件不成立" fi
# 现代语法 - 使用 && if [ "$x" -gt 3 ] && [ "$y" -lt 10 ]; then echo"x 大于 3 且 y 小于 10" else echo"条件不成立" fi
for循环与while循环
for循环
基本语法
variable:表示当前循环中的变量,它将依次取 list 中的每个值。
list:可以是一个列表,或者是通过命令生成的输出结果。
for variable in list do#开始 # 执行的命令 done#结束
```bash for variable in list do#开始 # 执行的命令 done#结束
遍历固定元素列表
方法一(不设变量)
#!/bin/bash for tian in"一""二""三""四""五""六""日" do echo"今天星期$tian" done ```bash #!/bin/bash for tian in"一""二""三""四""五""六""日" do echo"今天星期$tian" done
方法二(设置变量)
#!/bin/bash
# 定义一个数组 fruits=("一""二""三""四""五""六""日")
# ${fruits[@]}使用 for 循环遍历数组 for fruit in"${fruits[@]}" do echo"今天星期$fruit" done
```bash #!/bin/bash
# 定义一个数组 fruits=("一""二""三""四""五""六""日")
# ${fruits[@]}使用 for 循环遍历数组 for fruit in"${fruits[@]}" do echo"今天星期$fruit" done
遍历数字范围
方法一(不设置变量)
#!/bin/bash
# 遍历数字范围 1 到 10 间隔为2(可以不要) for i in {1..10..2} do echo"数字是 $i" done
```bash #!/bin/bash
# 遍历数字范围 1 到 10 间隔为2(可以不要) for i in {1..10..2} do echo"数字是 $i" done
方法二(通过seq生成):seq [起始值] [间隔] [结束值]
#!/bin/bash
# 使用 seq 生成数字 1 到 10,间隔为 2 for i in $(seq 1 2 10) do echo"数字是 $i" done
```bash #!/bin/bash
# 使用 seq 生成数字 1 到 10,间隔为 2 for i in $(seq 1 2 10) do echo"数字是 $i" done
遍历命令
for循环和Liunx下的命令配合操作,使用命令的输出的当作字符串返回——$()
#!/bin/bash data=$(date)
echo"日期:$data" ```bash #!/bin/bash data=$(date)
echo"日期:$data"
配合for循环使用获取
#!/bin/bash
# 使用 find 查找所有 .txt 文件,并通过 for 循环处理 for txt_file in $(find /etc -name "*.txt") do # 输出当前正在处理的文件 echo"正在查看文件:$txt_file" # 打开文件内容并输出 cat"$txt_file" echo"===================="# 分隔符 done ```bash #!/bin/bash
# 使用 find 查找所有 .txt 文件,并通过 for 循环处理 for txt_file in $(find /etc -name "*.txt") do # 输出当前正在处理的文件 echo"正在查看文件:$txt_file" # 打开文件内容并输出 cat"$txt_file" echo"===================="# 分隔符 done
(())配合类似C风格
(())里面可以进行简单的算数运算和条件运算,另外的let命令也可以进行算数运算
简单语法
for ((初始值; 条件; 自变量)) #自变量的值可为: i++ i-- i+=2(每次加2) do # 代码块 done
```bash for ((初始值; 条件; 自变量)) #自变量的值可为: i++ i-- i+=2(每次加2) do # 代码块 done
实例
从1到100
#!/bin/bash #i初始值为1,当i小于或等于100时就do一次,然后i自增 for ((i=1;i<=100;i++)) do echo"$i" done ```bash #!/bin/bash #i初始值为1,当i小于或等于100时就do一次,然后i自增 for ((i=1;i<=100;i++)) do echo"$i" done
while循环
基础语法
#直到条件不成立(假)时停止运行,或者使用循环终止 while [ 条件 ] do # 需要重复执行的命令 done
```bash #直到条件不成立(假)时停止运行,或者使用循环终止 while [ 条件 ] do # 需要重复执行的命令 done
循环输出数字
#!/bin/bash
i=1 while [ $i -el 5 ] do echo"i = $i" ((i++)) # 自增 i done
```bash #!/bin/bash
i=1 while [ $i -el 5 ] do echo"i = $i" ((i++)) # 自增 i done
终止语句配合使用
break终止当前循环
#!/bin/bash
i=0 whiletrue#设置永为真 do echo"当前值:$i" if [ $i -eq 12 ]; then#内嵌条件判断 echo"i 等于 5,终止循环" break# 当 i 等于 5 时终止循环 fi let i+=2 #上方条件不符合进行运算 done echo"跳出while循环" ```bash #!/bin/bash
i=0 whiletrue#设置永为真 do echo"当前值:$i" if [ $i -eq 12 ]; then#内嵌条件判断 echo"i 等于 5,终止循环" break# 当 i 等于 5 时终止循环 fi let i+=2 #上方条件不符合进行运算 done echo"跳出while循环"
continue跳出本次循环,并回到循环。
#!/bin/bash
i=1 while [ $i -le 50 ] #小于50则循环 do if [ $((i % 5)) -eq 0 ]; then#i除5的余等于0时执行一次 echo"$i为5的倍数" ((i++)) continue# 跳出本次循环(while后面语句都的都不执行了,重新再执行一次while) fi echo"当前值为:$i" ((i++)) done ```bash #!/bin/bash
i=1 while [ $i -le 50 ] #小于50则循环 do if [ $((i % 5)) -eq 0 ]; then#i除5的余等于0时执行一次 echo"$i为5的倍数" ((i++)) continue# 跳出本次循环(while后面语句都的都不执行了,重新再执行一次while) fi echo"当前值为:$i" ((i++)) done
配合|管道符使用
#!/bin/bash
cat /etc/apt/sources.list | whileread line #read逐行读取cat输出的内容 do let i++ echo"第$i行:$line" done
```bash #!/bin/bash
cat /etc/apt/sources.list | whileread line #read逐行读取cat输出的内容 do let i++ echo"第$i行:$line" done
until循环与case判断
until循环
基本语法
until [ condition ] do # commands当条件不成立才退出 done
```bash until [ condition ] do # commands当条件不成立才退出 done
数值累加
#!/bin/bash
sum=0 i=1 until [ $i -gt 10 ] #知道满足条件退出循环 do sum=$((sum + i)) let 1++ done
echo"1 到 10 的和是:$sum"
```bash #!/bin/bash
sum=0 i=1 until [ $i -gt 10 ] #知道满足条件退出循环 do sum=$((sum + i)) let 1++ done