【转】shell中的$0 $n $# $* $@ $? $$ 变量 if case for while

shell中的$0 $n $# $* $@ $? $$

 shell 编程 | shift 命令用法笔记

$0
当前脚本的文件名


$n
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。


$#
传递给脚本或函数的参数个数。返回数字类型


$*
传递给脚本或函数的所有参数。返回参数列表

$@
传递给脚本或函数的所有参数。

$* 和 $@ 都表示传递给函数或脚本的所有参数$* 和 $@ 的区别

  • 相同点:不被双引号" “包含时,都以”$1" “$2"…"$n” 的形式输出所有参数
  • 不同点:被双引号" “包含时,”$*" 会将所有的参数作为一个整体;"$@" 会将各个参数分开,以换行形式输出所有参数。


$?
上个命令的退出状态,或函数的返回值


$$
当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

 

 

 

 

 

 

 

 

 

if [ "$ciPosition" == "1" ]; then
    ciName="shop"
elif [ "$ciPosition" == "2" ]; then
    ciName="sso"
elif [ "$ciPosition" == "3" ]; then
    ciName="shuaige"
fi

 

 

case ${option} in
  api)
    command_api $@
    ;;
  front)
    command_front $@
    ;;
  sso)
    command_sso $@
    ;;
  crm)
    command_crm $@
    ;;
  admin)
    command_admin $@
    ;;
  -h|--help)
    usage
    exit 0
    ;;
  *)
    echo "Unexpected option: ${option} - this should not happen."
    usage
    exit 2
    ;;
esac

 

 

 

带双引号的"$*" 和 "$@“ 区别

 

#fearch 循环
for
j in '\' '|' '/' '-' do printf "%c 已完成 [%-${LENGTH}s] %d/%d. " "$j" "$MASK" "$SUCCEEDED" "$LENGTH"; sleep 0.5 done ----------------------------
#for 循环
list=() STEP=3 for((i=0; i < ${#list[@]}; i+=STEP)) do .... done

 

 shell 编程 | shift 命令用法笔记

 

while :
  do
    case "$1" in
      -h | --help)
        usage
        exit 0
        ;;
      -v | --version)    
        VERSION="$2"
        shift 2   
        ;;
      --debug)
        ENABLE_DEBUG=1
        shift
        ;;
      --) shift; break ;;
      *) echo "Unexpected option: $1 - this should not happen."
        usage 
        exit 2
        ;;
    esac
  done

read commitMessage
read -p "    请按任意键退出!" -n 1

 

 

 

 

 

# 日志相关
function log_debug ()
{
  if [ $ENABLE_DEBUG -eq 1 ];
  then
    DATE_N=`date "+%Y-%m-%d %H:%M:%S"`
    USER_N=`whoami`
    echo "${DATE_N} ${USER_N} execute $0 [DEBUG] $@"
  fi
}

function log_info ()
{
  DATE_N=`date "+%Y-%m-%d %H:%M:%S"`
  USER_N=`whoami`
  echo "${DATE_N} ${USER_N} execute $0 [INFO] $@"
}

function log_error ()
{
  DATE_N=`date "+%Y-%m-%d %H:%M:%S"`
  USER_N=`whoami`
  echo -e "33[41;37m${DATE_N} ${USER_N} execute $0 [ERROR] $@ 33[0m"
}

log_info "清理所有资源."

原文地址:https://www.cnblogs.com/qiyebao/p/13749722.html