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

 shell 编程 | shift 命令用法笔记

$0
当前脚本的文件名

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

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

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

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

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

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

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

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

Linux中的$符号的三种常见用法

echo "VERSION=${CI_APPLICATION_TAG:-$(date +%Y%m%d%H%M%S)}">.version;

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. \r" "$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 "\033[41;37m${DATE_N} ${USER_N} execute $0 [ERROR] $@ \033[0m"
}

log_info "清理所有资源."

随机推荐

  1. zookeeper的集群搭建

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  2. gRPC学习之五:gRPC-Gateway实战

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. canvas也能实现事件系统????

    前言 大家好! 我是热爱图形的fly, 之前在群里和粉丝讨论canvas 如何事件系统, 然后呢? 我自己其实也对这个比较感兴趣, 我看过很多canvas 实现的项目, 比如canvas 实现思维导图 ...

  4. MongoDB-02-复制集

    复制集(ReplicationSet) 基本原理 基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种)) 如果发生主库宕机,复制集内 ...

  5. Python - typing 模块 —— Callable

    前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...

  6. NGINX Ingress控制器1.0.0升级迁移文档(翻译)

    Ingress 是什么 Ingress 是对k8s集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP. Ingress 可以提供负载均衡.SSL 终结和基于名称的虚拟托管. 最近 ...

  7. 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

    大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...

  8. 小程序使用微信地址or小程序跳转设置页

    如果你有使用过小程序需要你授权微信地址的情况,那么正常的逻辑应该是这样的: 点击获取地址后,弹窗: 此时我相信选择拒绝的人应该还是比较多的,毕竟这是敏感数据,拒绝后再看页面相关功能是否有使用地址的合适 ...

  9. COM笔记-COM库函数

    COM在OLE32.DLL和 OLE32.LIB定义了一些常用的函数.在使用这些函数前要先调用CoInitialize来初始化COM库.当进程不再需要使用COM库函数时要调用CoUninitializ ...

  10. 阿里云rds分区

    SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'xw_user_appl ...