【转】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 "清理所有资源."
随机推荐
- 2020年Android开发市场真的饱和了吗?
公司在杭州,根据我的不客观数据体验来看,最饱和的是iOS,同样发布一个职位iOS是其他技术岗位10倍的投递量. 当然Android作为一个已经市场化十余年的技术门类,它必然早已经是成熟常态.这样的技术 ...
- erlang学习笔记
安装 Ubuntu Server上: sudo apt-get install erlang 如果安装时下载 太慢,可手工下载deb包( esl-erlang_16.a-rc1_ubuntu_prec ...
- 详细讲讲netty的pipiline!
前言 提到 Netty 首当其冲被提起的肯定是支持它承受高并发的线程模型,说到线程模型就不得不提到 NioEventLoopGroup 这个线程池,接下来进入正题. 线程模型 首先来看一段 Netty ...
- BeautifulSoup4的使用
一.介绍 Beautiful Soup 主要是用来解析提取 HTML 和 XML 文件中的数据. 现在官网推荐使用 Beautiful Soup 4 ,已经被移植到了BS4中. 安装 Beautifu ...
- NOIP 模拟 $28\; \rm 遗忘之祭仪$
题解 \(by\;zj\varphi\) 直接贪心模拟即可,对于每个点,如果它未被覆盖,直接在这覆盖一次. 每个黑点只会被扫一次,所以总复杂度为 \(\mathcal O\rm (nm)\) Code ...
- Failed to set locale, defaulting to C.UTF-8
CentOS 8中执行命令,出现报错:Failed to set locale, defaulting to C.UTF-8 报错原因: 1.没有安装相应的语言包. 2.没有设置正确的语言环境. 解决 ...
- 【C#】GC和析构函数(Finalize 方法)
析构函数: (来自百度百科)析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数.析构函数往往用来做"清理善后&quo ...
- 演练:创建和使用自己的动态链接库 (C++)
此分布演练演示如何使用 Visual Studio IDE 通过 Microsoft C++ (MSVC) 编写自己的动态链接库 (DLL). 然后,该演练演示如何从其他 C++ 应用中使用 DLL. ...
- C# Monitor.Wait() 源码追踪 (转载)
source: 释放对象上的锁并阻止当前线程,直到它重新获取该锁. 如果已用指定的超时时间间隔,则线程进入就绪队列. 可以在等待之前退出同步上下文的同步域,随后重新获取该域. [SecuritySaf ...
- 深入浅出Mybatis系列(四)---配置详解之properties与environments
我先简单的给大家示例一下properties的使用方法. <configuration> <!-- 方法一: 从外部指定properties配置文件, 除了使用resource属性指 ...