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. Android开发没有一技之长就废了吗?

    写在前面的话 不知你发现没有,人到中年之后,时间流逝的速度仿佛越来越快? 还记得毕业那会儿,我们怀着新鲜和好奇踏进了职场,那个时候每天都是满满的挑战和需要学习的东西,感觉时间过得真慢啊: 不知道从什么 ...

  2. SpringCloud升级之路2020.0.x版-14.UnderTow AccessLog 配置介绍

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford server: u ...

  3. 超硬核 Web 前端学霸笔记,学完就去找工作!

    文章和教程 Vue 学习笔记 Node 学习笔记 React 学习笔记 Angular 学习笔记 RequireJS 学习笔记 Webpack 学习笔记 Gulp 学习笔记 Python 学习笔记 E ...

  4. DHCP服务-中继代理

    DHCP中继代理(即DHCP Relay Agent)用于转发来自于另一个没有DHCP服务器子网段中客户端的DHCP请求,即当一台DHCP客户端发起请求后,此时DHCP中继代理就会将已经预先定义好的D ...

  5. MeteoInfo-Java解析与绘图教程(三)

    MeteoInfo-Java解析与绘图教程(三) 上文我们说到简单绘制色斑图(卫星云图),但那种效果可定不符合要求,一般来说,客户需要的是在地图上色斑图的叠加,或者是将图片导出分别是这两种效果 当然还 ...

  6. Mysql5.6.47开放远程访问(修改远程访问密码)

    1.登录mysql mysql -u root -p 然后输入密码,登录进去mysql: 2.切换数据库 use mysql; 3.修改权限 GRANT ALL PRIVILEGES ON *.* T ...

  7. Centos7上安装最新的nodejs

    下载nodejs包 安装wget yum install -y wget 下载nodejs到/usr/local/nodejs/下 https://cdn.npm.taobao.org/dist/no ...

  8. C#异步编程2

  9. uwp 之语音朗读

    xml code --------------------------------- <Page x:Class="MyApp.MainPage" xmlns="h ...

  10. 给MediaWiki增加看板娘

    我们想给我们的mediawiki增加个像我博客里这样的看板娘,那么怎么做才好呢? 其实很简单,只要在相应的模板文件里增加指定代码就好了! 修改模板文件 找到模板文件skins/Vector/Vecto ...