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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.