驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
shell的流程判定梳理
/  

shell的流程判定梳理

for

kotlin很相似,通过in后接数组来表示要遍历的参数,常见写法如下

for var in item1 item2 ... itemN
do
    command1
    command2
done

实战1:读取文件每一行内容

for url in $(cat ub.log)
do
  echo "${url}"
done

实战 2:创建目录和文件

for k in $( seq 1 10 )
do
   mkdir /home/uewell/a${k}
   cd /home/uewell/a${k}
   for l in $( seq 1 10 )
   do
   mkdir b${l}
   cd /home/uewell/a${k}
   done
   cd ..
done

其中seq表示生成一堆从 start 到 end 的数组。

seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数

实战 3:传统的 C语言写法

for ((i = 1; i <= 10; i++)); do
  echo "这是第 $i 次调用"
done

if

if condition1; then
    command1
elif condition2; then 
    command2
else
    commandN
fi
  • if的最后结尾是fi
  • if的判定条件写法是[ xxx ],注意前后都要有空格

举例如下

#! /bin/bash
xx() {
  if [ $1 -gt 10 ]; then
    echo "大于 10"
  elif [ $1 -gt 5 ]; then
    echo "大于 5,小于 10"
  else
    echo "小于 5"
  fi
}

# 调用
msg=$(xx 20)
echo "20:$msg"

附录常见的 if/while等判定语句

## 文件相关
if [ -x xx.sh ] # xx.sh 具备执行权限
if [ -d xx ] ## xx为目录
if [ -f xx ] ## xx为文件

## 整数类型判定
if [ 1 -eq 2 ] # -eq表示:等于
if [ 1 -gt 2  ] # -gt 表示:大于等于 `greate than`
if [ 1 -le 2 ] # -ge 表示:小于等于 `less equal` 

## 字符串判定
if [ "1" = "2" ] # 注意是 1 个等号
if [ "1" != "@" ] # 不等于

while

基本的样板代码如下所示

while condition
do
    command
done

自增的判定

#! /bin/bash
sum(){
  local result=0
  local i=0
  while [ i < $1 ]
  do
    result=$((result+i))
    i=$((i+1))
    # echo $i
  done
  echo $result
}

result=$(sum 10)
echo $result

case

类似 switch case 或者 when 这样的表达式

case 值 in
模式1)
    command1
    ;;
模式2)
    command2
    ;;
esac

案例如下

site="runoob"

case "$site" in
   "runoob") echo "菜鸟教程"
   ;;
   "google") echo "Google 搜索"
   ;;
   "taobao") echo "淘宝网"
   ;;
esac

或者

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done
骐骥一跃,不能十步。驽马十驾,功在不舍。