shell學習筆記2

四 正則表達式:
   基本元字符集的含義
   /                      屏蔽特殊元字符,使其失去特殊含義
   pattern/{n/}             匹配pattern出現的次數
   pattern/{n,/}            匹配pattern出現的次數,但最少是n次
   pattern/{n,m/}         匹配pattern出現的次數,但必須界於n和m之間
sed命令:
   sed在文本中查詢文本的方式:
   ----使用行號,可以是一行,也可以是多行
   ----使用正則表達式
   x表示一行
   x,y表示多行
   /partern/ 匹配包含partern的行
   /partern/partern/ 匹配包含兩個partern的行
partern/,x 在x行上查詢包含partern的行
   x,/partern/通過行號和模式來查詢行
   x,y!查詢不包含指定行號x和y的行
   sed的基本命令:
   p打印匹配的行
   =顯示文件的行號
   a/在定位行號後附加新文本信息
   i/在定位行號後插入新的文本信息
   d刪除定位行
   c/用新文本替換定位的的文本
   s使用替換模式替換相應的模式
   從另一個文件中讀文本
   寫到一個文件
   q第一個模式匹配完後立即退出
   l顯示與八進制ascii碼等價的控制字符
   {}在定位行執行的命令組
   n從另一個文件中讀文本下一行,並附加在下一行
   g將模式2粘貼到/partern n/
   y傳送字符
五.函數
   Shell允許將一組命令集或語句形成一個可用塊,這些塊稱爲shell函數
   定義函數的格式爲:
   -函數名()
   {
   命令1
   …
   }
-function 函數名()
   {
   …
   }
   [root@localhost ~]# ./func
now going to the function hello
Hello,today is Wed Mar 7 04:00:57 CST 2007
back from the function
[root@localhost ~]# cat func
#!/bin/bash
#hellofun
function hello ()
{
echo "Hello,today is `date`"
return 1
}
echo "now going to the function hello"
hello
echo "back from the function"
[root@localhost ~]# ./func2
now going to the function hello
Hello,chinaitlab today is Wed Mar 7 04:18:57 CST 2007
back from the function
[root@localhost ~]# cat func2
#!/bin/bash
#hellofun
function hello ()
{
echo "Hello,$1 today is `date`"
return 1
}
echo "now going to the function hello"
hello chinaitlab
echo "back from the function"
調用函數文件
[root@localhost ~]# ./func3
now going to the function hello
Hello,today is Wed Mar 7 04:28:05 CST 2007
back from the function
[root@localhost ~]# cat hellofun
#!/bin/bash
#hellofun
function hello ()
{
echo "Hello,today is `date`"
return 1
}
[root@localhost ~]# cat func3
. hellofun
echo "now going to the function hello"
hello
echo "back from the function"
[root@localhost ~]# more /etc/init.d/network
#! /bin/bash
#
# network       Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to /
#              start at boot time.
#
### BEGIN INIT INFO
# Provides: $network
### END INIT INFO
 
# Source function library.
. /etc/init.d/functions
此文件的開頭部分就調用了一個函數“. /etc/init.d/functions
關於函數調用的情況的檢查:
[root@localhost ~]# ./func3
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="./func3")
BASH_VERSINFO=([0]="3" [1]="00" [2]="15" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='3.00.15(1)-release'
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=i386
IFS=$' /t/n'
INPUTRC=/etc/inputrc
LANG=en_US.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LOGNAME=root
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:'
MACHTYPE=i386-redhat-linux-gnu
MAIL=/var/spool/mail/root
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=2691
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=2
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
TERM=vt100
UID=0
USER=root
_=hellofun
hello ()
{
    echo "Hello,today is `date`";
    return 1
}
now going to the function hello
Hello,today is Wed Mar 7 04:35:44 CST 2007
back from the function
[root@localhost ~]# cat func3
. hellofun
set
echo "now going to the function hello"
hello
echo "back from the function"
上文中的黑色字體部分顯示了定義的函數
刪除函數
[root@localhost ~]# ./func3
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="./func3")
BASH_VERSINFO=([0]="3" [1]="00" [2]="15" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='3.00.15(1)-release'
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=i386
IFS=$' /t/n'
INPUTRC=/etc/inputrc
LANG=en_US.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LOGNAME=root
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:'
MACHTYPE=i386-redhat-linux-gnu
MAIL=/var/spool/mail/root
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=2691
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=2
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
TERM=vt100
UID=0
USER=root
_=hellofun
hello ()
{
    echo "Hello,today is `date`";
    return 1
}
now going to the function hello
./func3: line 5: hello: command not found
back from the function
[root@localhost ~]# cat func3
. hellofun
set
unset hello
echo "now going to the function hello"
hello
echo "back from the function"
函數返回值
[root@localhost ~]# ./func3
now going to the function hello
Hello,today is Wed Mar 7 04:45:51 CST 2007
0
back from the function
[root@localhost ~]# cat hellofun
#!/bin/bash
#hellofun
function hello ()
{
echo "Hello,today is `date`"
return 0 #定義函數的返回值,調用成功顯示0
}
[root@localhost ~]# cat func
#!/bin/bash
#hellofun
function hello ()
{
echo "Hello,today is `date`"
return 1
}
echo "now going to the function hello"
hello
echo "back from the function"
[root@localhost ~]# cat func3
. hellofun
echo "now going to the function hello"
hello
echo $? #通過調用$?變量來調用函數的返回值
echo "back from the function"
shift命令
   shift n
   此命令每執行一次將參數的位置向左移動n
[root@localhost ~]# vi opt2
#!/bin/bash
usage ()
{
echo "usage:`basename $0` filenames"
}
totalline=0
if [ $# -lt 2 ]
then
        usage
        exit
fi
while [ $# -ne 0 ]
do
        line=`cat $1|wc -l`
        echo "$1 : ${line}"
        totalline=$[ $totalline+$line ]
        shift
done
echo "----------"
echo "total: ${totalline}"
~
~
~
~
~
~
"opt2" 20L, 265C written
[root@localhost ~]# ./opt2 linshi.sh func
linshi.sh : 4
func : 10
----------
total: 14
[root@localhost ~]# cat func
#!/bin/bash
#hellofun
function hello ()
{
echo "Hello,today is `date`"
return 1
}
echo "now going to the function hello"
hello
echo "back from the function"
gettops
   此命令獲得多個命令行的參數
   [root@localhost ~]# cat optgets
#!/bin/bash
ALL=false
HELP=false
FILE=false
VERBOSE=false
while getopts ahvc OPTION     getopts命令把ahvc的四個字母的值依次賦值給OPTION變量
do
        case $OPTION in
        a)
                ALL=true
                echo "ALL IS $ALL"
                ;;
        h)
                HELP=true
                echo "HELP is $HELP"
                ;;
        v)
                VERBOSE=TRUE
                echo "VERBOSE IS $VERBOSE"
                ;;
        c)
                echo "c value is $c"
                ;;
        /?)
                echo "`basename $0` -[a h f v] -[c value] file "
        esac
done
 
[root@localhost ~]# ./optgets -f -a -c
./optgets: illegal option -- f
optgets -[a h f v] -[c value] file
ALL IS true
c value is
[root@localhost ~]# cat optgets2
#!/bin/bash
ALL=false
HELP=false
FILE=false
VERBOSE=false
while getopts ahvc: OPTION
do
        case $OPTION in
        a)
                ALL=true
                echo "ALL IS $ALL"
                ;;
        h)
                HELP=true
                echo "HELP is $HELP"
                ;;
        v)
                VERBOSE=TRUE
                echo "VERBOSE IS $VERBOSE"
                ;;
        c)
                c=$OPTARG
                echo "c value is $c"
                ;;
        /?)
                echo "`basename $0` -[a h f v] -[c value] file "
        esac
done
 
[root@localhost ~]# ./optgets2 -f -a -c ff
./optgets2: illegal option -- f
optgets2 -[a h f v] -[c value] file
ALL IS true
c value is ff
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章