Shell 的基本使用

这里使用的是Bash

概要语法

#!/bin/bash

# 变量定义
temp="hello-world"

# 使用变量 -- 只能在双引号中嵌入变量
echo "hello -${temp}- world"

# 截取字符串
echo ${temp:0:2}

#字符串长度
echo ${#temp}

# 数组
arr=(1, 12, "a")
echo ${arr[0]}, ${arr[@]}, ${#arr[@]}

# 参数
echo "参数的个数: $#"
echo "所有参数: $@"
echo "第一个参数: $1"
echo "当前程序运行进程: $$"
echo "后台退出时的状态: $?"

# 运算符

# 算数符
# 原生的bash不支持算数,使用expr来实现
# 使用``包裹
# 表达式和运算符之间要有空格
val=`expr 1 + 2`
val_1=`expr ${val} % 2`


echo "1 + 2 = ${val}", ${val_1}
echo "1 * 2 = `expr 1 \* 2`"
echo "1 / 2 = `expr 1 / 2`"


if [ ${val} == ${val_1} ]
then
   echo "a 等于 b"
fi

if [ ${val} != ${val_1} ]
then
   echo "a 不等于 b"
fi

# 关系运算符
# -eq -ne -gt -lt -ge -le
if [ $val -eq $val_1 ]
then
  echo "a eq b"
fi

a=10
b=20

# 布尔运算符
# !(非) -o(或) -a(与)

if [ $a -lt 11 -a $b -gt 11 ]
then
  echo "$a -lt 11 -a $b -gt 11"
fi

# 逻辑运算符
# && ||

if [[ $a -lt 11 && $b -gt 11 ]]
then
  echo "$a -lt 11 -a $b -gt 11"
fi


filepath="/Users/air_cc/workspace/wechat/fabric-deploy"
if [ -d $filepath ]
then
  echo "file is directory"
fi


# echo的用法
# read name # 读取标准输入的第一行
# echo "get name: ${name}"

echo -e "hello\n" # 转意输出
echo "hello"

echo `date`
echo `ls`

# printf格式化输出
printf "%s-%c-%-4d-%.2f \n" hello w 12 12.234
printf "jack \a"


# 流程控制
a=$1
if [ $a -eq 10 ]
then
  echo 'a == 10'
elif [[ $a -lt 20 ]]; then
  echo '$a lt 20'
else
  echo 'other'
fi

for (( i = 0; i < 10; i++ )); do
  echo "i = $i"
done

for i in 12, 'aaa', false; do
  echo "i = ${i}"
done

a=10
while [[ a -gt 1 ]]; do
  echo "while a == $a"
  let "a--"
done


until [[ a -gt 10 ]]; do
  if [ $a -ne 3 ]; then
    echo "until a == $a"
  else
    echo "util a is ${a}"
  fi

  let "a++"

  if [ $a -eq 8 ];then
    echo "breaked"
    break;
  fi

done


# read word
case $word in
  1) echo 'select 1'
    ;;
  2) echo 'select 2'
    ;;
  *) echo 'select other'
    ;;
esac


# 函数
finWithParam() {
  printf "$0 参数: $1 - ${12} - \n $@ \n - $# \n"
}
finWithParam 1 2 3 4 5 6 7 8 9 10 11 12 13


# 使用外部sh脚本
filepath='./tempfile'
if [ -f $filepath ]; then
  echo `file ./tempfile`
fi
source ./tempfile # 或者 . ./tempfile
echo "-h-"
echo "get url: ${url}"

小技巧

  • 当前执行shell文件的位置
echo "相对位置: `dirname $0`"
echo "绝对位置: `cd \`dirname $0\` && pwd`"

参考

    原文作者:Air_cc
    原文地址: https://www.jianshu.com/p/a24919ab23d4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞