Shell 学习(一)
有的时候case能对参数进行过滤,如下例子:[*]#!/bin/bash
[*]
[*]case "$1" in
[*]"") echo "Usage: ${0#.} "; exit $E_PARAM;;
[*]
[*]# 注意:${0##*/} 是${var##pattern} 的一种替换形式。得到的结果是$0
[*]
[*]-*) FILENAME=./$1;;#如果传递进来的文件名参数($1)以一个破折号开头
[*] #那么用./$1来代替。这样后边的命令将不会将它作
[*] #为一个选项来解释。
[*]*) FILENAME=$1;; #否则,$1.
[*]
[*]esac
[*]echo $FILENAME
[*]exit 0
[*]# cat 20
[*]#!/bin/bash
[*]
[*]case "$1" in
[*]"") echo "Usage: ${0#.} "; exit $E_PARAM;;
[*]
[*]# 注意:${0##*/} 是${var##pattern} 的一种替换形式。得到的结果是$0
[*]
[*]-*) FILENAME=./$1;;#如果传递进来的文件名参数($1)以一个破折号开头
[*] #那么用./$1来代替。这样后边的命令将不会将它作
[*] #为一个选项来解释。
[*]*) FILENAME=$1;; #否则,$1.
[*]
[*]esac
[*]echo $FILENAME
[*]exit 0
select的用法:
[*]#!/bin/bash
[*]
[*]PS3='Choose your favorite vegetable: ' # 设置提示符字串.
[*]
[*]echo
[*]
[*]select vegetable in "beans" "carrots" "potatoes" "onions" "rutabagas"
[*]do
[*]echo
[*]echo "Your favorite veggie is $vegetable."
[*]echo "Yuck!"
[*]echo
[*]break# 如果这里没有 'break' 会发生什么?
[*]done
[*]
[*]exit 0
运行会有如下输出:
[*]$ ./21
[*]
[*]1) beans
[*]2) carrots
[*]3) potatoes
[*]4) onions
[*]5) rutabagas
[*]Choose your favorite vegetable: 1 #输入1
[*]
[*]Your favorite veggie is beans.
[*]Yuck!
也可以用函数参数的形式给select传递参数:
[*]#!/bin/bash
[*]
[*]PS3='Choose your favorite vegetable: '
[*]
[*]echo
[*]
[*]choice_of()
[*]{
[*]select vegetable
[*]# 被忽略, 所以'select'使用传递给函数的参数.
[*]do
[*]echo
[*]echo "Your favorite veggie is $vegetable."
[*]echo "Yuck!"
[*]echo
[*]break
[*]done
[*]}
[*]
[*]choice_of beans rice carrots radishes tomatoes spinach
[*]# $1 $2 $3 $4 $5 $6
[*]# 传递给choice_of()的参数
[*]
[*]exit 0
当一个命令或者是shell本身需要初始化(或者创建)一个新的子进程来执行一个任务的时候,这种行为被称为fork.这个新产生的进程被叫做子进程,并且这个进程是从父进程中fork出来的.当子进程执行它的任务时, 父进程也在运行.
注意: 当父进程获得了子进程的进程ID时, 父进程可以给子进程传递参数, 然而反过来却不行.
如下例子:
[*]#!/bin/bash
[*]#spawn.sh
[*]
[*]
[*]PIDS=$(pidof sh $0)
[*]P_array=( $PIDS )
[*]echo $PIDS
[*]let "instances = ${#P_array
[*]} - 1"
[*]
[*]echo "$instances instance(s) of this script running."
[*]echo ""; echo
[*]
[*]
[*]sleep 1 #等一下
[*]sh $0
[*]
[*]exit 0#没必要,脚本永远不会运行到这里。
通常情况下, 脚本中的Bash内建命令在运行的时候是不会fork出一个子进程的. 但是脚本中的外部或者过滤命令通常会fork出一个子进程.
页:
[1]