$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

区别:@*

  • 相同点:都是引用所有参数
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在12 3)则"*" 等价于 “12 3"(传递了一个参数);而“@" 等价于 "1""2" "$3"(传递了三个参数)

一个守护脚本 demon:

###################
# VERSION=0.0.
################### #!/bin/bash
###############################
####Global parameters##########
############################### set -x #echo on CUR_DIR=`pwd`
VA_LOG_LEVEL="err"
VA_RUN_LEVEL="demon" ####for record file delete
DEFAULT_DAYS=
RECORD_FILE_PATH=/var/video_record
DEFAULT_FILE_CHECK=
##### unit : G
DEFAULT_MINI_SPACE=
PROCESS_NUM=
#CertMS
#DarwinStreamingServer #CertMS_Server
#Darwin_Server #functions
###################
##parse argument
###################
usage()
{
echo "######################################" echo "usage of maintain.sh :"
echo "options "
echo "-l : videomon log level [warn , info , err] , default is err"
echo "-m : videomon run mod[demon , foreground] , default is demon"
echo "-c : record file delete check! [ 0:not check 1:check , default is 1]"
echo "-n : [Delete the record files of the n days ago , default is 15 days]"
echo "-d : [record file path , default is :/var/video_record]"
echo "For example: ./maintain.sh -l info -m foreground -c 1 -n 10 -d /video_record or ./maintain.sh "
echo "-? : usage info" echo "######################################"
} get_opt()
{
while getopts ":?l:m:c:n:d:" optname
do
case "$optname" in
"l")
VA_LOG_LEVEL=$OPTARG
;;
"m")
VA_RUN_LEVEL=$OPTARG
;;
"c")
DEFAULT_FILE_CHECK=$OPTARG
;;
"n")
DEFAULT_DAYS=$OPTARG
;;
"d")
RECORD_FILE_PATH=$OPTARG
;;
"?")
usage
exit
;;
*)
# Should not occur
echo "maintain.sh :Unknown error while processing options"
exit
;;
esac
done
} ####################
##Video_Monitor clean
####################
video_monitor_clean()
{
for (( i = ; $i < PROCESS_NUM; i++ ));
do
echo $i;
pid_videomon=`ps aux|grep -v grep|grep "videomon$i" | grep "$"|sed -n '1P'|awk '{print $2}'` if [ $pid_videomon ]
then
killall - videomon$i
fi
done
} ####################
##ran_videomon_monitor
####################
ran_videomon_monitor()
{
echo $
cd $CUR_DIR/bin$ if [ $VA_RUN_LEVEL == "demon" ]
then
nohup ./videomon$ -l $VA_LOG_LEVEL -p pid -d &
else
nohup ./videomon$ -l $VA_LOG_LEVEL -p pid &
fi echo Start videomon Success!
} ####################
##record file check
####################
record_file_check()
{
cd $CUR_DIR
if [ -f record_file_delete.sh ]
then
chmod +x record_file_delete.sh
###
pid_record_sh=`ps aux|grep -v grep|grep "record_file_delete.sh" | grep "$"|sed -n '1P'|awk '{print $2}'`
if [ -z $pid_record_sh ]
then
nohup ./record_file_delete.sh -n $DEFAULT_DAYS -d $RECORD_FILE_PATH -s $DEFAULT_MINI_SPACE &
else
echo "record_file_delete.sh is running!"
fi
###
else
echo "Can not find record_file_delete.sh"
return
fi
} ####################
##videomon_maintain
#################### videomon_maintain()
{
while true
do
sleep ####Check whether need to delete record files
if [ $DEFAULT_FILE_CHECK -eq ]
then
record_file_check
fi for (( i = ; $i < PROCESS_NUM; i++ ));
do
echo $i;
pid=`ps aux|grep -v grep|grep "videomon$i -l $VA_LOG_LEVEL" | grep "$"|sed -n '1P'|awk '{print $2}'`
if [ -z $pid ]
then
ran_videomon_monitor $i
fi
done
done
} ###############
##start process
###############
get_opt $@
if [ $? != ]
then
echo get_opt unknow options!
exit
fi video_monitor_clean for (( i = ; $i < PROCESS_NUM; i++ ));
do
ran_videomon_monitor $i
done videomon_maintain

参考http://www.cnblogs.com/kaituorensheng/p/4002697.html

shell参数 传递的更多相关文章

  1. Shell如何传递字符串

    Shell 在写函数的时候,有时候需要传递字符串,由于字符串中有空格,所以结果总是不对,下面写个小例子,解决这个问题: #!/bin/bash # value init TT="adb sh ...

  2. shell 参数

    转:http://hi.baidu.com/ipvsadm/item/489d9e16460195ddbe9042ee linux中shell变量$#,$@,$0,$1,$2的含义解释 linux中s ...

  3. shell 参数与逻辑结构语句

    shell参数 如同ls 命令可以接受目录等作为它的参数一样,在shell编程时同样可以使用参数.Shell有位置参数和内部参数. 1. 位置参数 由系统提供的参数称为位置参数.位置参数的值可以用$N ...

  4. JAVA 数组作为方法参数—传递地址

    package Code411;//数组作为方法参数—传递地址public class DodeArrayParam { public static void main(String[] args) ...

  5. shell如何传递变量到另一个脚本文件中

    http://www.jbxue.com/article/shell/20707.html本文介绍了shell脚本传递变量到另一个脚本文件中的方法,在脚本中调用另一脚本,即创建了一个子进程,感兴趣的朋 ...

  6. Linux Shell参数替换

    Linux Shell参数替换 2013-06-03 10:01 by 轩脉刃, 1816 阅读, 0 评论, 收藏, 编辑 Bash中的符号的作用是参数替换,将参数名替换为参数所代表的值.对于 来说 ...

  7. Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间

    Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间 一丶URLconf配置 ...

  8. hive shell参数

    Hive Shell参数 1.Hive命令行 语法结构 hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e ...

  9. shell如何传递外部参数给文件

    shell里面如何传递参数: sh test.sh zhang 20 那test.sh里面咋接受参数呢? #!/usr/bin/env sh name=$1 age=$2 echo "nam ...

随机推荐

  1. js关于cookie的各种方法

    //删除cookiedelCookie("GroupName");//s20是代表20秒//h是指小时,如12小时则是:h12//d是天数,30天则:d30setCookie(&q ...

  2. day004-Map类

    1.Map集合概述 Map是一个接口,只要是实现了该接口的类就是一个双列集合. 双列集合就是每次存储元素时需要存储两个元素的集合. 这两个元素称为键值对, Key Value ==>映射关系 特 ...

  3. 显示C++数据的数据类型

    #include <typeinfo> using namespace std; ... cout << typeid(d).name() << endl; 其中, ...

  4. avast从隔离区恢复后,仍无法打开被误杀文件的解决方案

    从隔离区中手动恢复后,隔离区中被恢复的文件将不再展示. 此时,如果手动恢复的文件仍无法打开(图标此时也异常),请: 将avast禁用: 将avast启用. 然后尝试重新打开被误隔离并手动恢复的文件.

  5. IOS xcode 离线帮助文档安装和安装路径

    将想要安装的xcode 帮助文档 版本,将 ‘帮助文档包’ 放入‘xcode 帮助文档安装路径’.再将Xcode软件重启. xcode 帮助文档安装路径: 在‘应用程序’->Xcode软件 右击 ...

  6. linux命令之grep命令

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  7. Netbackup-Oracle数据库恢复演练(上)

    目录 第一章NBU实施内容 1 第二章 环境准备 1 2.1添加LICENSE: 1 2.2安装配置NBU客户端(linux,unix相同) 2 2.3配置并验证oracle备份脚本 3 2.4添加备 ...

  8. object dection资源

    https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html

  9. Onboard,迷人的引导页样式制作库

    简介 Onboard主要用于引导页制作,源码写的相当规范,值得参考. 项目主页: https://github.com/mamaral/Onboard 实例下载: https://github.com ...

  10. PowerDesigner生成sql脚本

    1.打开PowerDesigner->New Project; 2.填写项目名称,选择文件的存放路径: 3.新建一个模型,New Model: 4.选择概念模型,填写模型名称: 5.选择enti ...