基本用法

参数传递

#!/bin/bash

# 通过-n参数来判断参数长度是否为空,注意需要添加双引号
if [ -n "$*" ]; then
  echo "是否有参数:有"
else
  echo "是否有参数:无"
fi

if [ -n "$1" ]; then
  echo "是否有第一个参数:有,值为:$1"
  if [[ $1 -eq 100 ]]; then
    echo "[1]第一个参数等于100"
  else
    echo "[1]第一个参数不等于100"
  fi
else
  echo "是否有第一个参数:无"
fi

if [[ $1 -eq 100 ]]; then
  echo "[2]第一个参数等于100"
else
  echo "[2]第一个参数不等于100"
fi

if [[ $1 == 100 ]]; then
  echo "[3]第一个参数等于100"
else
  echo "[3]第一个参数不等于100"
fi

echo "当前文件名称:$0"
echo "参数个数为:$#"
# $*表示将所有的参数组合成一个更长的字符串
echo "所有参数为:$*"
# $@表示将所有参数放进一个容器中
echo "所有参数为:$@"
echo "第一个参数为 $1"

for i in $*
do
  echo "\$*获取参数:$i"
done

for i in $@
do
  echo "\$@获取参数:$i"
done

变量

  • 单引号中使用$引用变量会当做普通字符串而不是变量值,双引号可以取变量值
# substring功能
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

# indexOf查找任意一个字符的功能(示例查找i、o)
string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

# 定义变量
your_name="jack"
echo "hello, $your_name!"
echo 'hello, '${your_name}'!'
# 获取字符串长度
echo "length of your name: ${#your_name}"

# 比较字符串大小、是否相等
str1="$1"
str2="$2"
if [ "$str1" == "$str2" ]; then
  echo "str1==str2"
elif [[ "$str1" > "$str2" ]]; then
  echo "str1>str2"
else
  echo "str1<str2"
fi

数组

#!/bin/bash

# 数组
array_name=(
value0
value1
value2
value3
)

echo "第一个元素:${array_name[0]}"

# 修改第一个元素的值
array_name[0]="value00"

echo "一次打印所有数组元素:${array_name[*]}"
echo "一次打印所有数组元素:${array_name[@]}"

# 取得数组元素的个数
length=${#array_name[@]}
# 取得数组单个元素的长度
lengthn=${#array_name[2]}


# 使用for-in遍历数组
for i in ${array_name[@]}
do
  echo $i
done

#使用while遍历数组
j=0
while [ $j -lt ${#array_name[@]} ]
do
  echo ${array_name[$j]}
  let j++
done

# 使用类似于java的编写方式来遍历数组
for (( k=0; k<${#array_name[*]}; k++ )) {
  echo ${array_name[k]}
}

运算符

  • [] 表达式
注意:在 [] 表达式中,常见的 >, < 需要加转义字符,表示字符串大小比较,以 acill 码位置作为比较。不直接支持 >, < 运算符,还有逻辑运算符   、&& ,它需要用 -a[and] –o[or] 表示。
  • [[ ]] 表达式
注意:[[]] 运算符只是 [] 运算符的扩充。能够支持 >, < 符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:   && ,不再使用 -a -o。

Shell 基本运算符

流程控制

# if-elif-else-fi
str1="$1"
str2="$2"
if [ "$str1" == "$str2" ]; then
  echo "str1==str2"
elif [[ "$str1" > "$str2" ]]; then
  echo "str1>str2"
else
  echo "str1<str2"
fi

# for
array_name=(aaa bbb ccc)
for ele in ${array_name[@]}
do
  echo $ele
done

for ((i=0;i<${#array_name[@]};i++))
do
  echo ${array_name[$i]}
done

# while case
while true
do
  echo "请输入1-5之间的数字"
  read aNum
  case $aNum in
    1|2)
      echo "你输入的数字是1或者是2,继续执行"
      continue
    ;;
    3|4|5)
      echo "你输入的数字为:$aNum"
    ;;
    *)
      echo "你输入的不是1-5之间的数字,结束"
      break
    ;;
  esac
done

函数调用

#!/bin/bash

function func1() {
  echo "调用func1函数======"
  # 必须返回整型值
  return 100;
}

func1

echo "方法func1的返回值:$?"

# 获取参数
function func2() {
  echo "调用func2函数======"
  echo "第一个参数:$1"
  echo "第一个参数:$2"
  echo "获取当前文件名称:$0"
  echo "获取所有的参数:$*"
  echo "获取所有的参数:$@"
}

func2 zhangsan lisi

注释

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

参考