$# 是传给脚本的参数个数
$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. PHP判断变量是否小数并对小数进行处理

    /*判断是否为小数demo*/$a = 1.2; if(is_int($a)){ echo "$a 是整数!"; }else{ echo "$a 不是整数!"; ...

  2. window下mycat要放在根目录下

    原理文档没有跟我开玩笑呢? 建议放在盘符根目录下 ,无视的我,检查了多遍jdk环境,检查了多遍bat文件内容,仍然没有解决 找不到或无法加载主类 直到我乖乖的把目录放跟盘符才解决,心好累= =! 可能 ...

  3. Arduino-定义串口

    在一个老外写的代码中找到了一个非常好的定义串口的方法!   Arduino用下面这种方法定义串口可以方便的把协议应用的任意的端口,大大提高了代码的修改性和移植性.       以下是范例:       ...

  4. wcf 的 知识点

    1. wcf 的9种 协议

  5. MySQL游标(cursor) 定义及使用

    概念 游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集. 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果 ...

  6. Shell编程学习之Shell编程基础(一)

    这篇随笔将要介绍关于Shell编程的基本知识,这些将会在假设你已经熟悉了Linux系统和命令行的基本知识. 构建基本脚本 你应该了解或熟悉使用Shell命令行了,但是只是使用Shell命令行的命令,有 ...

  7. YSlow的安装与说明文档

    yslow官网 http://yslow.org/ 很明显起这个名字是说why slow 为什么这么慢,理所当然是为当前网页进行检测 借百度的 什么是YSlow? YSlow是yahoo发布的一款基于 ...

  8. 在什么情况下采用BFC

    介绍BFC的博文有很多,下面,我就从另一个角度解释一下“在什么情况下会使用BFC” 以下仅代表我的个人看法,如果有错误的地方,还希望大家能告诉我,以免我在错误的道路上越走越远. 一.BFC是什么 Bl ...

  9. 前端面试题二(来自前端网http://www.qdfuns.com/notes/23515/fa8b1e788ac39b04108fc33e5b543c4a.html)

    HTML&CSS 1.请描述一下 cookies,sessionStorage 和 localStorage 的区别? cookie是网站为了标示用户身份而储存在用户本地终端(Client S ...

  10. java TCP通信 socket 套接字 用图片上传轰炸服务器

    客户端 package com.swift.jinji; import java.io.FileInputStream; import java.io.IOException; import java ...