【转】shell中的$0 $n $# $* $@ $? $$ 变量 if case for while
shell中的$0 $n $# $* $@ $? $$
$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



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 "清理所有资源."
随机推荐
- zookeeper的集群搭建
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- gRPC学习之五:gRPC-Gateway实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- canvas也能实现事件系统????
前言 大家好! 我是热爱图形的fly, 之前在群里和粉丝讨论canvas 如何事件系统, 然后呢? 我自己其实也对这个比较感兴趣, 我看过很多canvas 实现的项目, 比如canvas 实现思维导图 ...
- MongoDB-02-复制集
复制集(ReplicationSet) 基本原理 基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种)) 如果发生主库宕机,复制集内 ...
- Python - typing 模块 —— Callable
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
- NGINX Ingress控制器1.0.0升级迁移文档(翻译)
Ingress 是什么 Ingress 是对k8s集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP. Ingress 可以提供负载均衡.SSL 终结和基于名称的虚拟托管. 最近 ...
- 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)
大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...
- 小程序使用微信地址or小程序跳转设置页
如果你有使用过小程序需要你授权微信地址的情况,那么正常的逻辑应该是这样的: 点击获取地址后,弹窗: 此时我相信选择拒绝的人应该还是比较多的,毕竟这是敏感数据,拒绝后再看页面相关功能是否有使用地址的合适 ...
- COM笔记-COM库函数
COM在OLE32.DLL和 OLE32.LIB定义了一些常用的函数.在使用这些函数前要先调用CoInitialize来初始化COM库.当进程不再需要使用COM库函数时要调用CoUninitializ ...
- 阿里云rds分区
SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'xw_user_appl ...