【转】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 "清理所有资源."
随机推荐
- C++ //运算符重载 +号
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 //1.成员函数重载 +号 6 cla ...
- Android面试中多说这么一句话,薪水直接涨5k
小鱼同学最近很难受,明明获得了人人羡慕的大厂Offer,走在路上都能被熟人祝贺,学弟学妹争着抢着求他进行经验分享. 但有件事一直让他很介意.其实这件事起因很简单,是关于这份Offer的薪资问题,面试的 ...
- Maven 基础标签之版本管理和冲突解决
前言 我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线 maven基础 Maven 是一个项目管理工具,主要用于项目构建,依赖管理, ...
- SpringBoot开发二十-私信列表
私信列表功能开发. 发送私信功能开发 首先创建一个实体类:Message package com.nowcoder.community.entity; import java.util.Date; p ...
- 安鸾CTF Writeup SSRF03
SSRF03 题目URL: http://whalwl.host:2000/ 其中的弯路我就不多说了,直接上解题思路 方法和SSRF02类似都是找内网机器端口,继续用ssrf02 这道题的方法:htt ...
- CVE-2020-2555漏洞复现&&流量分析
CVE-2020-2555漏洞复现&&流量分析 一.准备环境 windows7: weblogic 12.2.1.4.0 JDK版本为jdk-8u261 关于weblogic搭建可以看 ...
- 基于Vue2和Node.js的反欺诈系统设计与实现
最近包工头喊农民工小郑搬砖,小郑搬完砖后沉思片刻,决定写篇小作文分享下,作为一个初学者的全栈项目,去学习它的搭建,到落地,再到部署维护,是非常好的. ------题记 写在前面 通过本文的学习,你 ...
- 痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash. 痞子衡前段时间写过一篇 <串行NAND Fl ...
- easyexcel-导入
package com.meeno.framework.util.easyexcel.entity; import cn.afterturn.easypoi.excel.annotation.Exce ...
- IO异常--缓冲流--转换流--序列化流( IO流2 )
1.IO异常的处理 JDK7前处理:使用try...catch...finally 代码块,处理异常部分 // 声明变量 FileWriter fw = null; try { //创建流对象 fw ...