当前位置:文档之家› sh脚本语法

sh脚本语法

sh脚本语法
sh脚本语法

一、开头

程序必须以下面的行开始(必须方在文件的第一行):

#!/bin/sh

符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。

当编写脚本完成时,如果要执行该脚本,还必须使其可执行。

要使编写脚本可执行:

编译chmod +x filename 这样才能用./filename 来运行

二、注释

在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。

三、变量

在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明。要赋值给一个变量,可以这样写:

#!/bin/sh

#对变量赋值:

a=”hello world”

# 现在打印变量a的内容:

echo “A is:”

echo $a

有时候变量名很容易与其他文字混淆,比如:

num=2

echo “this is the $numnd”

这并不会打印出”this is the 2nd”,而仅仅打印”this is the “,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:

num=2

echo “this is the ${num}nd”

这将打印:this is the 2nd

四、环境变量

由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。

五、Shell命令和流程控制

在shell脚本中可以使用三类命令:

1)Unix 命令:

虽然在shell脚本中可以使用任意的unix命令,但是还是有一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。

常用命令语法及功能

echo “some text”: 将文字内容打印在屏幕上

ls: 文件列表

wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数

cp sourcefile destfile: 文件拷贝

mv oldname newname : 重命名文件或移动文件

rm file: 删除文件

grep ‘pattern’ file: 在文件内搜索字符串比如:grep ’searchstring’ file.txt

cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令

cat file.txt: 输出文件内容到标准输出设备(屏幕)上

file somefile: 得到文件类型

read var: 提示用户输入,并将输入赋值给变量

sort file.txt: 对file.txt文件中的行进行排序

uniq: 删除文本文件中出现的行列比如:sort file.txt | uniq

expr: 进行数学运算Example: add 2 and 3expr 2 “+” 3

find: 搜索文件比如:根据文件名搜索find . -name filename -print

tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile basename file: 返回不包含路径的文件名比如:basename /bin/tux将返回tux dirname file: 返回文件所在路径比如:dirname /bin/tux将返回/bin

head file: 打印文本文件开头几行

tail file : 打印文本文件末尾几行

sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus替换为LinuxFocus :cat text.file | sed ’s/linuxfocus/LinuxFocus/’ >newtext.file

awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F 指定其他分割符。

catfile.txt | awk -F, ‘{print $1 “,” $3}’这里我们使用“,”作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下:Adam Bor, 34, IndiaKerryMiller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA

2) 概念: 管道, 重定向和backtick

这些不是系统命令,但是他们真的很重要。

1.管道(|)—–将一个命令的输出作为另外一个命令的输入。

grep “hello” file.txt | wc -l

在file.txt中搜索包含有”hello”的行并计算其行数。

在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。

2.重定向—–将命令的结果输出到文件,而不是标准输出(屏幕)。

3.>—–写入文件并覆盖旧文件

4.>>—–加到文件的尾部,保留旧文件内容。

5.反短斜线—–使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。

命令:

find . -mtime -1 -type f -print

用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下linux 脚本:

#!/bin/sh

# The ticks are backticks (`) not normal quotes (‘):

tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`

3) 流程控制

1.if

“if” 表达式如果条件为真则执行then后面的部分:

if ….; then

….

elif ….; then

….

else

….

fi

大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…

通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。[ -f “somefile” ] :判断是否是一个文件

[ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限

[ -n “$var” ] :判断$var变量是否有值

[ “$a” = “$b” ] :判断$a和$b是否相等

执行man test可以查看所有测试表达式可以比较和判断的类型。

直接执行以下脚本:

#!/bin/sh

if [ “$SHELL” =“/bin/bash” ]; then

echo “your login shell is the bash (bourne again shell)”

else

echo “your login shell is not bash but $SHELL”

fi

变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。

快捷操作符

熟悉C语言的朋友可能会很喜欢下面的表达式:

[ -f “/etc/shadow” ] && echo “This computer uses shadow passwors”

这里&& 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。

您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印” This computer uses shadow passwors”。同样或操作(||)在shell编程中也是可用的。这里有个例子:

#!/bin/sh

mailfolder=/var/spool/mail/james

[ -r “$mailfolder” ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; }

echo “$mailfolder has mail from:”

grep “^From ” $mailfolder

该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From” 一行。

如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:

◆打印错误信息

◆退出程序

我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。

不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。

2.case

case :表达式可以用来匹配一个给定的字符串,而不是数字。

case … in

…) do something here ;;

esac

让我们看一个例子。file命令可以辨别出一个给定文件的文件类型,比如:

file lf.gz

这将返回:

lf.gz: gzip compressed data, deflated, original filename,

last modified: Mon Aug 27 23:09:18 2001, os: Unix

我们利用这一点写了一个叫做smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:

#!/bin/sh

ftype=`file “$1″`

case “$ftype” in

“$1: Zip archive”*)

unzip “$1” ;;

“$1: gzip compressed”*)

gunzip “$1” ;;

“$1: bzip2 compressed”*)

bunzip2 “$1” ;;

*) echo “File $1 can not be uncompressed with smartzip”;;

esac

您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。

也就是说,当我们运行:

smartzip articles.zip

$1 就是字符串articles.zip

3. selsect

select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。

select var in … ; do

break

done

…. now $var can be used ….

下面是一个例子:

#!/bin/sh

echo “What is your favourite OS?”

select var in “Linux” “Gnu Hurd” “Free BSD” “Other”; do

break

done

echo “You have selected $var”

下面是该脚本运行的结果:

What is your favourite OS?

1) Linux

2) Gnu Hurd

3) Free BSD

4) Other

#? 1

You have selected Linux

4.loop

while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true.

关键字”break” 用来跳出循环。而关键字”continue”用来不执行余下的部分而直接跳到下一个循环。

while …; do

….

done

for-loop表达式查看一个字符串列表(字符串用空格分隔) 然后将其赋给一个变量:

for var in ….; do

….

done

在下面的例子中,将分别打印ABC到屏幕上:

#!/bin/sh

for var in A B C ; do

echo “var is $var”

done

下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:#!/bin/sh

# list a content summary of a number of RPM packages

# USAGE: showrpm rpmfile1 rpmfile2 …

# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm

for rpmpackage in $*; do

if [ -r “$rpmpackage” ];then

echo “=============== $rpmpackage ==============”

rpm -qi -p $rpmpackage

else

echo “ERROR: cannot read file $rpmpackage”

fi

done

这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。

如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm

此时$* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.

5. 引号

在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序作这种替换,您可以使用引号:让我们来看一个例子,假设在当前目录下有一些文件,两个jpg文件,mail.jpg 和tux.jpg。

1.2 编译SHELL脚本

#ch#!/bin/sh mod +x filename

∪缓螅梢酝淙耄?./filename 来执行您的脚本。【???】这将打印出”mail.jpg tux.jpg”的结果。

引号(单引号和双引号) 将防止这种通配符扩展:

#!/bin/sh

echo “*.jpg”

echo ‘*.jpg’

这将打印”*.jpg” 两次。

单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。

#!/bin/sh

echo $SHELL

echo “$SHELL”

echo ‘$SHELL’

运行结果为:

/bin/bash

/bin/bash

$SHELL

最后,还有一种防止这种扩展的方法,那就是使用转义字符——反斜杆:

echo *.jpg

echo $SHELL

这将输出:

*.jpg

$SHELL

6. Here documents

当要将几行文字传递给一个命令时,here documents(译者注:目前还没有见到过对该词适合的翻译)是一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果我们四有那个here documents就不必用echo函数一行行输出。

一个“Here document” 以shift by 2

–) shift;break;; # end of options

-*) echo “error: no such option $1. -h for help”;exit 1;;

*) break;;

esac

done

echo “opt_f is $opt_f”

echo “opt_l is $opt_l”

echo “first arg is $1”

echo “2nd arg is $2”

您可以这样运行该脚本:

cmdparser -l hello -f — -somefile1 somefile2

返回的结果是:

opt_f is 1

opt_l is hello

first arg is -somefile1

2nd arg is somefile2

这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数.

第2部分实例

现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:

cp framework.sh myscript

然后再插入自己的函数。

让我们再看两个例子:

二进制到十进制的转换

脚本b2d 将二进制数(比如1101) 转换为相应的十进制数。这也是一个用expr 命令进行数学运算的例子:

#!/bin/sh

# vim: set sw=4 ts=4 et:

help()

{

cat <

b2h — convert binary to decimal

USAGE: b2h [-h] binarynum

OPTIONS: -h help text

EXAMPLE: b2h 111010

will return 58

HELP

exit 0

}

error()

{

# print an error and exit

echo “$1”

exit 1

}

lastchar()

{

# return the last character of a string in $rval

if [ -z “$1″ ]; then

# empty string

rval=””

return

fi

# wc puts some space behind the output this is why we need sed: numofchar=`echo -n “$1” | wc -c | sed ‘s/ //g’ `

# now cut out the last char

rval=`echo -n “$1” | cut -b $numofchar`

}

chop()

{

# remove the last character in string and return it in $rval

if [ -z “$1″ ]; then

# empty string

rval=””

return

fi

# wc puts some space behind the output this is why we need sed: numofchar=`echo -n “$1” | wc -c | sed ‘s/ //g’ `

if [ “$numofchar” = “1” ]; then

# only one char in string

rval=””

return

fi

numofcharminus1=`expr $numofchar “-” 1`

# now cut all but the last char:

rval=`echo -n “$1” | cut -b 0-${numofcharminus1}`

}

while [ -n “$1” ]; do

case $1 in

-h) help;shift 1;; # function help is called

–) shift;break;; # end of options

-*) error “error: no such option $1. -h fo r help”;;

*) break;;

esac

done

# The main program

sum=0

weight=1

# one arg must be given:

[ -z “$1″ ] && help

binnum=”$1″

binnumorig=”$1”

while [ -n “$binnum” ]; do

lastchar “$binnum”

if [ “$rval” = “1” ]; then

sum=`expr “$weight” “+” “$sum”`

fi

# remove the last position in $binnum

chop “$binnum”

binnum=”$rval”

weight=`expr “$weight” “*” 2`

done

echo “binary $binnumorig is decimal $sum”

该脚本使用的算法是利用十进制和二进制数权值(1,2,4,8,16,..),比如二进制”10″可以这样转换成十进制:

0 * 1 + 1 * 2 = 2

为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc –c计算字符个数,然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。

文件循环程序

或许您是想将所有发出的邮件保存到一个文件中的人们中的一员,但是在过了几个月以后,这个文件可能会变得很大以至于使对该文件的访问速度变慢。下面的脚本rotatefile可以解决这个问题。这个脚本可以重命名邮件保存文件(假设为outmail)为outmail.1,而对于outmail.1就变成了outmail.2 等等等等…

#!/bin/sh

# vim: set sw=4 ts=4 et:

ver=”0.1″

help()

{

cat <

rotatefile — rotate the file name

USAGE: rotatefile [-h] filename

OPTIONS: -h help text

EXAMPLE: rotatefile out

This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1

and create an empty out-file

The max number is 10

version $ver

HELP

exit 0

}

error()

{

echo “$1”

exit 1

}

while [ -n “$1” ]; do

case $1 in

-h) help;shift 1;;

–) break;;

-*) echo “error: no such option $1. -h for help”;exit 1;;

*) break;;

esac

done

# input check:

if [ -z “$1” ] ; then

error “ERROR: you must specify a fil e, use -h for help”

fi

filen=”$1″

# rename any .1 , .2 etc file:

for n in 9 8 7 6 5 4 3 2 1; do

if [ -f “$filen.$n” ]; then

p=`expr $n + 1`

echo “mv $filen.$n $filen.$p”

mv $filen.$n $filen.$p

fi

done

# rename the original file:

if [ -f “$filen” ]; then

ec ho “mv $filen $filen.1”

mv $filen $filen.1

fi

echo touch $filen

touch $filen

这个脚本是如何工作的呢?在检测用户提供了一个文件名以后,我们进行一个9到1的循环。文件9被命名为10,文件8重命名为9等等。循环完成之后,我们将原始文件命名为文件1同时建立一个与原始文件同名的空文件。

调试

最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。

shell也有一个真实的调试模式。如果在脚本”strangescript” 中有错误,您可以这样来进行调试:

sh -x strangescript

这将执行该脚本并显示所有变量的值。

shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:

sh -n your_script

这将返回所有语法错误。

linux+shell脚本语言基础知识

linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example

shell 脚本入门笔记

#!/bin/bash 放在第一行用于告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。文件保存为**.sh。 执行方式: 1.chmod777 test.sh ./test.sh 2./bin/sh test.sh echo 用于向窗口输出文本 定义变量时,变量名不加$符号。 例如:your_name="https://www.doczj.com/doc/cf14509395.html," 还可以使用语句进行赋值: for file in `ls /etc` 或 for file in $(ls /etc) 以上语句将/etc 下目录的文件名循环出来。 使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx"

echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,建议给所有变量加上花括号。 只读变量 readonly+变量名 删除变量 unset+变量名不能删除只读变量 Shell 字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP 类似。 单引号 str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。 双引号 your_name='qinjx'

str="Hello, I know you are \"$your_name\"! \n" 双引号的优点: 双引号里可以有变量 双引号里可以出现转义字符 拼接字符串 your_name="qinjx" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 获取字符串长度 string="abcd" echo ${#string} 输出4 提取子字符串 以下实例从字符串第2 个字符开始截取4 个字符:string="runoob is a great site" echo ${string:1:4} 输出unoo 查找子字符串

经典shell-脚本实例

Linux shell 脚本实例 1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。 #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done ////////////////////////////////////////// #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数 #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result * $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

Shell脚本编写基础

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 一、什么是shell 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。 当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的https://www.doczj.com/doc/cf14509395.html,所做的一样,所不同的是,在DOS中,https://www.doczj.com/doc/cf14509395.html,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。 二、几种流行的shell 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型: #echo $SHELL $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令: #shell-name 来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。 使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍: 1.ash ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。 2.bash bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色: (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 (2)自动通过查找匹配的方式给出以某字符串开头的命令。 (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。 3.ksh ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。 4.csh

常用shell脚本

如何用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi #TODO: test if $size is a valid integer filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize let pieces=$filesize/$size let remain=$filesize-$pieces*$size if [ $remain -gt 0 ]; then let pieces=$pieces+1 fi echo pieces: $pieces i=0 while [ $i -lt $pieces ]; do echo split: $file.$i: dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1 done echo "#!/bin/bash" >; merge echo "i=0" >;>; merge echo "while [ $i -lt $pieces ];" >;>; merge echo "do" >;>; merge echo " echo merge: $file.$i" >;>; merge echo " if [ ! -f $file.$i ]; then" >;>; merge echo " echo merge: $file.$i missed" >;>; merge

Shell编程实验指导

Shell编程实验 一、实验目的 了解 Shell 的作用和主要分类。 了解 Bash的一般语法规则。 练习编写简单的shell程序。 二、实验内容 1.Shell变量的定义及其使用。 2.位置参数和环境变量。 3.Shell中的特殊字符。 4.条件判断结构与循环结构 5.函数的定义和使用 三、预备知识 1、LINUX环境下常用命令和VI编辑器的操作。 2、了解Shell作用和主要分类等基础知识。 四、实验设备及工具 软件:PC机操作系统REDHAT ELAS4环境 五、实验原理及说明 Shell是Linux系统中一个重要的层次,它是用户与系统交互作用的界面。在介绍Linux 命令时,Shell都作为命令解释程序出现:它接收用户打入的命令,进行分析,创建子进程实现命令所规定的功能,等子进程终止工作后,发出提示符。这是Shell最常见的使用方式。 Shell 除了作为命令解释程序以外,还是一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if, case, while, for 等语句,有自己的语法结构。利用Shell程序设计语言可以编写出功能很强、但代码简单的程序,特别是它把相关的Linux命令有机地组合在一起,可大大提高编程的效率,充分利用Linux系统的开放性能,设计出适合自己要求的命令。

六、实验步骤 1.语法练习 (1) Shell变量 Shell有两种变量:环境变量和临时变量。在Shell脚本中临时变量又分为两类:用户定义的变量和位置参数。 ?用户定义的变量 用户定义的变量是最普遍的Shell变量,变量名是以字母或下化线打头的字母、数字和下线符序列,并且大小写字母意义不同。变量名的长度不受限制。定义变量并赋值的一般形式是:变量名=字符串例如, MYFILE=/usr/meng/ff/m1.c a.定义并显示变量的值 在程序中使用变量的值时,要在变量名前面加上一个符号“$”。这个符号告诉Shell,要读取该变量的值。 练习1.1: b.read命令 作为交互式输入手段,可以利用read命令由标准输入(即键盘)上读取数据,然后赋给指定的变量。其一般格式是:read 变量1 [变量2...] 练习1.2: 利用read命令可交互式的为变量两赋值。输入数据时,数据间以空格或制表符作为分隔符。注意以下情况: *若变量个数与给定数据个数相同,则依次对应赋值,如上面例子所示。 *若变量数少于数据个数,则从左至右依次给变量赋值,而最后一个变量取得所有余下数据的值。

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

Shell基本语法结构

☆掌握Shell的基本语法结构。 ☆学会编写并执行Shell脚本程序。 ☆学会在Linux下进行进程调度和作业调度 任务一学习变量与表达式 Shell是操作系统最外面的一层,负责管理用户与操作系统之间的交互,例如等待用户输入,向操作系统解释用户的输入,以及处理操作系统的各种输出结果。 除了作为命令解释器之外,Shell本身还是一个解释型的程序设计语言。Shell程序设计语言支持变量、表达式、函数和流程控制结构等,任何在终端能够执行的命令也放到Shell程序。 ● 4.1.1 变量 ●在Shell中有三种变量:系统变量、环境变量和用户变量。其中系统变量在对参数判 断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置,用户变量在编程过程中使用最多。 ●这几种变量的赋值方法各不相同,主要有:直接设置变量值、变量之间的置换、从 命令行参数获取、从环境变量获取和用户输入等几种方式。 ●引用变量一般采用“$variable”的形式引用变量variable的值。 1.系统变量 ●Shell常用的系统变量用于提供系统信息。系统变量一般采用命令行参数获取。 2.环境变量 ●Shell在开始执行前就已经定义了一些与系统工作环境有关的变量。 ●显示环境变量用echo命令。 ●在bash中,设置环境变量用set命令。用unset命令可将环境变量重新设置为系统 默认值,。 ●用户并不需要每次登录后都对各种环境变量进行手工设置,通过环境设置文件,用 户的工作环境的设置可以在登录的时候由系统自动来完成。环境设置文件有两种:系统环境设置文件和用户环境设置文件。 ●

3.用户变量 ●不管系统变量和环境变量有多少,对于需求来说,总是不够的。用户常常需要自定 义一些变量,这些变量就称为用户变量。 ●定义用户变量的语法为: ●name=string ●局部变量与全局变量 Shell变量也有其规定的作用范围。局部变量的作用范围仅仅在其命令行所在的Shell 或Shell脚本文件中。全局变量的作用范围则包括本Shell进程及其所有子进程,即相当于环境变量,贯穿于整个当前用户环境。可以使用export命令将局部变量设置为全局变量。 export name=string ●【操作实例4.1】 用文本编辑器gedit编写一个Shell脚本test1.sh,显示执行脚本时输入的参数及参数总数目,并定义一个局部变量和一个全局变量。 4.1.2 表达式 Shell中的表达式分为算术运算表达式、关系与逻辑表达式和正则表达式等几种。 1.expr命令 ●expr命令的功能是求表达式的值。 2. 算术表达式 ●算术表达式可以是由运算符+、-、*、/、=组成的表达式。 3. 关系与逻辑表达式 ●命令test与方括号[ ]都用于进行条件测试,测试的结果返回逻辑值,即真true(0)和 假false(1)。test和[ ]可以相互替换。 ● ●

shell

5. Shell脚本语法请点评 5.1. 条件测试:test [ 请点评 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与C语言的逻辑表示正好相反)。例如测试两个数的大小关系: $ VAR=2 $ test $VAR -gt 1 $ echo $? $ test $VAR -gt 3 $ echo $? 1 $ [ $VAR -gt 3 ] $ echo $? 1 虽然看起来很奇怪,但左方括号[确实是一个命令的名字,传给命令的各参数之间应该用空格隔开,比如,$VAR、-gt、3、]是[命令的四个参数,它们之间必须用空格隔开。命令test 或[的参数形式是相同的,只不过test命令不需要]参数。以[命令为例,常见的测试命令如下表所示: 表 31.2. 测试命令 [ -d DIR ] 如果DIR存在并且是一个目录则为真

[ -f FILE ] 如果FILE存在且是一个普通文件则为真 [ -z STRING ] 如果STRING的长度为零则为真 [ -n STRING ] 如果STRING的长度非零则为真 [ STRING1 = STRING2 ] 如果两个字符串相同则为真 [ STRING1 != STRING2 ] 如果字符串不相同则为真 [ ARG1 OP ARG2 ] ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个 和C语言类似,测试条件之间还可以做与、或、非逻辑运算: 表 31.3. 带与、或、非的测试命令

Linux常用的系统监控shell脚本

https://www.doczj.com/doc/cf14509395.html,下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助。 1、查看主机网卡流量 1.#!/bin/bash 2. 3.#network 4. 5.#Mike.Xu 6. 7.while : ; do 8. 9.time=’date +%m”-”%d” “%k”:”%M’ 10. 11.day=’date +%m”-”%d’ 12. 13.rx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’ 14. 15.tx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $6}’|cut -c7-’ 16. 17.sleep 2 18. 19.rx_after=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’ 20. 21.tx_after=’ifconfig eth0|sed -n “8″p|awk ‘{print $6}’|cut -c7-’ 22. 23.rx_result=$[(rx_after-rx_before)/256] 24. 25.tx_result=$[(tx_after-tx_before)/256] 26. 27.echo “$time Now_In_Speed: “$rx_result”kbps Now_OUt_Speed: “$tx_result”kbps” 28. 29.sleep 2 30. 31.done 2、系统状况监控 1.#!/bin/sh 2. 3.#systemstat.sh

shell脚本语法

脚本的后缀还是写 .sh 虽然不是必须,但一眼看见易于知晓是脚本 shell简单的说就是一个命令解释器,用于用户和linux内核的沟通。 shell中所执行的命令相当于fork出的子进程一样。 建立脚本。 #!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序,bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本 Xxxx //脚本内容 chmod 777 file之后就可以执行了 1.基础 # //shell脚本注释符号 二:变量 1.变量种类: linux下变量类型只有两种 数字型和字符串型 2.声明变量 declare varname 声明一个局部变量varname,也可以一次声明多个同类型的变量 declare var1 var2 var3 仅创建变量的程序能使用的变量是时局部变量

export varname2 保留字export使得变量可由环境存取。即这个变量可以和系统中的其他程序共享。 ????这里不会 3.变量赋值,引用变量时前面要加" $ " 将数值赋给变量,可以不声明变量直接赋值如 let var=1000 *注意:等号两端不能有空格 let后面不加&号???待 比如 i++ : delcare i=1 let i=”$i+1" 将字符串赋给变量 必须先声明变量,且赋值在同一条语句,赋的值必须用双引号引起 declarevar="100-100-100" echo $var HOME="/home" //注意赋值不要有空格 HOME_LIST=$(ls /home) //把命令的执行结果赋值给变量 ehco $HOME //$ 符号是获得变量HOME的值 系统变量: $0 这个程序的执行名字

SHELL编程实用教程

SHELL编程[Bash编程手册] =============== SHELL编程 =============== 一、Shell语法 1.1、变量声明 1.2、数组声明和使用 1.3、特殊的变量 1.4、运算和运算符 1.4.1、整数运算符 1.5、流程语句 1.5.1、if 语句 1.5.2、case语句 1.5.3、select 语句 1.6、循环语句 1.6.1、for语句 1.6.2、while 语句 1.6.3、breake 和continue 1.6.4、shift 二、函数 三、shell程序调试 四、信号 五、bash中常用的命令 =============== 一、Shell语法 =============== 1.1、变量声明 变量=值 (注意:等号两侧不能有空格) a=”hello” b=9 unset a 撤销变量 a

readonly a=2 声明静态的变量 a=2 ,不能 unset export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用 变量应用中要注意: echo “$1 = $1 ; $2 = $2 “; 屏蔽$1 ,屏蔽 $2 ,直接显示 $1 ,$2,同理*也屏蔽了 * 的通配符作用 ${SAT}day ,变量要与字符串连在一起时,应该用 ${} a= `ls -al` 反引号,运行里面的命令,并把结果返回给变量a a=$(ls -al) 等价于反引号 单引号‘’和双引号“”的区别,单引号完全屏蔽 $a 变量,双引号不屏蔽$a,单引号和双引号都屏蔽 * 的通配符作用。 1.2、数组声明和使用 1 name[0]="Tom" 2 name[1]="Tomy" 3 name[2]="John" 4或 5 name=("Tom""Tomy""John") 例子: 1 #!/bin/bash 2 name=("Tom""Tomy""John") 3for i in012 4do 5echo $i:${name[$i]} 6done 1.3、特殊的变量

常用shell脚本指令

常用shell脚本命令 1、显示包含文字aaa的下一行的内容: sed -n '/aaa/{n;p;}' filename 2、删除当前行与下一行的内容: sed -i '/aaa/{N;d;}' filename 3、删除当前行与下两行的内容: sed -i '/aaa/{N;N;d;}' filename 依次类推,删除三行,则为{N;N;N;d;},分析知:N为next 4、得出以空格为分割的字符串中单词的个数,即统计个数: awk ' { print NF } ' 如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f 则执行 echo $VALUE | awk ' { print NF } ' 后的结果为6 5、在linux中建立一个文件与另一文件的链接,即符号链接 ln -s /var/named/chroot/etc/named.conf named.conf 这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如: lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf -> /var/named/chroot/etc/named.conf 注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。所以需对实际文件进行删除操作。 6、显示指定字符范围内的内容: 如:显示文件test.txt中字符#test begin与#test end之间所有的字符 sed -n "/#test begin/,/#test end/p" test.txt 或 awk "/#test begin/,/#test end/" test.txt 在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则. 1. 单引号和双引号的区别 单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。请看如下例子: [root@linux ~]# name=HaHa [root@linux ~]# echo $name HaHa [root@linux ~]# myname="$name is wow" [root@linux ~]# echo $myname HaHa is wow [root@linux ~]# myname='$name is wow'

很实用的Shell脚本(实践版)

很实用的Shell脚本(实践版)

/erpHome/shell/old/$1/$2.zip.old find . -mtime +7 | xargs nice -n 20 zip -qm /erpHome/shell/old/$1/$2_$DayOfWeek.zip # find . -mtime +7 Fi archiveOld2.sh . /erpHome/shell/setP.sh export DayOfWeek=`date +"%u"`

if test "$#" -lt 1 || test -z "$1" then echo At least one argument needed. exit fi if test ! -e "$ShellHome/old/$1" then cd $ShellHome/old/ mkdir -p $1 fi if test ! -e "$ERPHome/$1" then echo "$ERPHome/$1" "does not exist" exit fi cd $ERPHome/$1 mv $ShellHome/old/$1_$DayOfWeek.zip $ShellHome/old/$1.zip.old find . -mtime +7 -type f | xargs nice -n 20 zip -qm $ShellHome/old/$1_$DayOfWeek.zip #find . -mtime +7 -type f

archiveOldAll.sh /erpHome/shell/archiveOld.sh work/dr/engine jrprint /erpHome/shell/archiveOld.sh work/de tmp /erpHome/shell/archiveOld2.sh public

PowerShell基本语法及常用命令

PowerShell基本语法及常用命令 Powershell常用命令 1.Get-Command 得到Powshell所有命令 2.Get-Process 获取所有进程 3.Set-Alias 给指定命令重命名如:Set-Alias aaa Get-Command 4.Set-ExecutionPolicy remotesigned 设置powershell可直接执行脚本文件一般脚本文件以.ps1结尾执行脚本文件直接输入文件地址即可执行脚本文件中只写命令即可 5.Get-Help get-* 查询以get开头的命令Get-Help *service* Get-Help Get-Command 获取Get-Command命令的基本用法 6.Get-Member 获取对象属性如: $var | Get-Memeber 访问$var属性直接$var.T oString() PS中的变量定义 不需要定义或声明数据类型 在变量前加"$" 定义变量的规则 -变量可以是数字$123 -变量可以是字符串$abc -变量可以是特殊字符${@1b} 内置的变量 -$pshome -$home

-$profile 变量赋值: $var=123 $var="aaaaaa" 取变量值: $var 变量赋值方法:Set-Variable var 100 取值方法: Get-Variable var 清空值: Clear-Variable var 删除变量Remove-Variable var 取多个变量如var1 var2 var3地值: Get-Variable var* 另一种赋值方法$var1="bbb" $var2="$var $var1" 结果$var2="aaaaaa bbb" $var2='$var $var1' 结果$var2="$var $var1" $date=Get-Date 获取当前时间 $date.AddDays(3) 当前时间加3天 排序用法 Get-Process | Sort-Object ws 根据WS值由小到大排序 Get-Process | Sort-Object | fl Get-Process | Sort-Object | Format-List 以列表形式显示数据 导入导出文件 Get-Process > c:\aa.txt

个人整理shell脚本编程笔记

shell脚本编程学习笔记(一) 一、脚本格式 vim shell.sh #!/bin/bash//声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program://程序内容说明 #History://时间和作者 二、shell变量的种类 用户自定义变量:由用户自己定义、修改和使用 与定义变量:Bash与定义的特殊变量,不能直接修改 位置变量:通过命令行给程序传递执行的参数 1、定义变量: 变量名要以英文字母或下划线开头,区分大小写。 格式:变量名=值 输出变量:echo $变量名 2、键盘输入为变量内容: 格式:read [-p "信息"] 变量名 如:read -p "pewase input your name:" name 3、不同引号对变量的作用 双引号"":可解析变量,$符号为变量前缀。 单引号'':不解析变量,$为普通字符。 反引号``:将命令执行的结果输出给变量。 三、shell条件测试 1、test命令: 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数字。 格式:test 条件表达式[ 条件表达式] (注意:[]与表达式之间存在空格) 2、常见的测试类型: 测试文件状态 格式:[ 操作符文件或目录] 如:if [ -d /etc ] then echo "exists" else echo "not exists" fi 常见的测试操作符: -d:测试是否为目录 -e:测试目录或文件是否存在 -f:测试是否为文件 -r:测试当前用户是否有读权限 -w:测试当前用户是否有写权限 -x:测试当前用户是否有执行权限

shell编程

shell程序设计 其实作为命令语言交互式地解释和执行用户输入的命令只是shell功能的一个方面,shell 还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。使用shell编程类似于DOS中的批处理文件,称为shell script,又叫shell程序或shell命令文件。 一、shell基本语法 shell的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进行通讯。 (1)输入输出重定向 在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(standard input,文件描述指针为0)、标准输出(standard output,文件描述指针为1)、标准错误输出(standard error,文件描述指针为2)。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>”和“<”来进行输入输出重定向。如: command>file:将命令的输出结果重定向到一个文件。 command>&file:将命令的标准错误输出一起重定向到一个文件。 command>>file:将标准输出的结果追加到文件中。 command>>&file:将标准输出和标准错误输出的结构都追加到文件中。 command (2)管道pipe pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下: command1| command2 [| command3...] 也可以连同标准错误输出一起送入管道: command1| &command2 [|& command3...] (3)前台和后台 在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下: command 产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。 command & 产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。 二、shell程序的变量和参数 像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。 Shell有以下几种基本类型的变量: (1)shell定义的环境变量 shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还

Shell脚本的特殊符号

这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下 在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我们编写的代码更加简洁和高效,这里给大家汇总下: 1、{} 大括号: 用法一:通配符扩展 eg: ls my_{finger,toe}s 这条命令相当于如下命令的组合: ls my_fingers my_toes eg: mkdir {userA,userB,userC}-{home,bin,data} 我们将得到userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data,use rC-home, userC-bin, userC-data,这几个目录。 用法二:可用于语句块的构造,语句之间用回车隔开。如果你想在某些使用单个语句的地方(比如在AND或OR列表中)使用多条语句,你可以把它们括在花括号{}中来构造一个语句块。 eg: { grep -v “$cdcatnum” $strack_file > $temp_file cat $temp_file > $strack_file echo cat -n file1 } (注:以上大括号中的四句命令够成了一个语句块) 用法三:参数扩展 ${name:-default} 使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量na me; ${name:=default}使用指定值来代替空的或者没有赋值的变量name; ${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退出码1。 ${#name} 给出name的长度 ${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分

Shell 函数

Shell 函数 重要:本文是由机器翻译的,请参阅免责声明。请在此处中查找本文的英文版本以便参考。 注意:如果Microsoft Jet 表达式服务运行在沙盒模式下,可防止潜在不安全的表达式的求值,则禁用函数、方法、对象或本主题中介绍的属性。沙盒模式的详细信息,"沙盒模式"中搜索帮助。 运行可执行的程序,并返回一个Variant (双) 表示该程序的任务ID 如果成功,否则将返回零。 语法 Shell (路径名[,windowstyle ] ) Shell函数语法具有以下参数︰ 参数说明 路径名必填。变体(字符串)。要执行的程序和任何名称所需的参数或命令行开关;可能包括目录或文件夹和驱动器。在Macintosh 上,您可以使用MacID函数指定应用程序的签名,而不是其名称。下面的示例使用Microsoft word 的签名︰Shell MacID("MSWD") windowstyle可选。变体(整数) 对应于是用要运行程序窗口的样式。如果省略windowstyle,具有焦点的最小化启动程序。 在Macintosh 上(系统7.0 或更高版本),windowstyle仅确定运行时,该应用程序获得焦点。 命名参数windowstyle具有以下值︰ 常数值说明 vbHide 0 窗口处于隐藏状态,且焦点传递到隐藏窗口。不适用于Macintosh 平台vbHide常量。vbNormalFocus 1 窗口具有焦点和还原到其原始大小和位置。 vbMinimizedFocus 2 窗口显示为具有焦点的图标。 vbMaximizedFocus 3 窗口最大化具有焦点。 vbNormalNoFocus 4 窗口将还原为最新的大小和位置。当前活动窗口保持活动状态。vbMinimizedNoFocus 6 窗口中显示为图标。当前活动窗口保持活动状态。 注解 如果Shell函数成功执行命名的文件,则返回启动程序的任务标识号。任务ID 是唯一的编号标识运行的程序。如果Shell 函数无法启动命名的程序,将发生错误。 在Macintosh、vbNormalFocus、vbMinimizedFocus和vbMaximizedFocus上所有将应用程序放在前台;在后台,vbHide,vbNoFocus,vbMinimizeFocus所有将应用程序。 注意:默认情况下,Shell函数异步运行其他程序。这意味着Shell启动的程序可能无法完成执行之前执行后面Shell函数。 示例 注意:下面的示例说明使用此函数在Visual Basic for Applications (VBA) 模块。有关处理VBA 的详细信息,搜索旁边的下拉列表中选择开发人员参考,然后在搜索框中输入一个或多个条款。 此示例使用Shell函数运行由用户指定的应用程序。在MacIntosh上,默认的驱动器名称"HD",而不是反斜杠分号分隔路径名的部分。同样,您可以指定,而不是\Windows Macintosh 文件夹。 ' Specifying 1 as the second argument ' opens the application in normal size and ' gives it the focus. Dim RetVal ' Run Calculator. RetVal = Shell("C:\WINDOWS\CALC.EXE", 1) 注意:机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

相关主题
文本预览
相关文档 最新文档