- 浏览: 162409 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
abc08010051:
简单明了,非常不错
java.lang.Thread.State类详解 -
tenderlitch:
jdk api文档里面的描述...
set闲聊 -
xmind:
图不错,收藏之。
图中Thread.wait()改用Objec ...
java.lang.Thread.State类详解 -
lahvey:
因为你的$VALUE值是“sed.txt”,并不是这个文件的内 ...
条件控制(test,expr……) -
tomotoboy:
thanks
tr用法
if then else语句
简单的if语句
最普通的if语句是:
if条件
then 命令
if
使用if语句时,必须将then部分放在新行,否则会产生错误。如果要不分行,必须使用命令分隔符。本
书其余部分将采取这种形式。现在简单 if语句变为:
if 条件;then
命令
if
不必拘泥于变量或数值测试,也可以测知系统命令是否成功返回。对 grep使用if语句找出grep是否成功
返回信息。下面的例子中 grep用于查看tomotoboy是否在数据文件sed.txt中,注意'tomotoboy'用于精
确匹配。
用变量测试grep输出
正像前面看到的,可以用grep作字符串操作。下面的脚本中,用户输入一个名字列表,grep在变量中查找,要求其查找指定字符串
文件拷贝输出检查
下面测试文件拷贝是否正常,如果 cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息。注意错误信息中` basename $0`打印脚本名。如果脚本错误退出,一个好习惯是显示脚本名并将之定向到标准错误中。用户应该知道产生错误的脚本名。
当前目录测试
当运行一些管理脚本时,可能要在根目录下运行它,特别是移动某种全局文件或进行权限改变时。一个简单的测试可以获知是否运行在根目录下。下面脚本中变量DIRECTORY使用当前目录的命令替换操作,然后此变量值与 " / "字符串比较(/为根目录) 。如果变量值与字符串不等,则用户退出脚本,退出状态为1意味错误信息产生。
文件权限测试
可以用i f语句测试文件权限,下面简单测试文件sed.txt是否可写
测试传递到脚本中的参数
if语句可用来测试传入脚本中参数的个数。使用特定变量$#,表示调用参数的个数。可以测试所需参数个数与调用参数个数是否相等。以下测试确保脚本有三个参数。如果没有,则返回一个可用信息到标准错误,然后代码退出并显示退出状态。如果参数数目等于3,则显示所有参数。
决定脚本是否为交互模式
有时需要知道脚本运行是交互模式(终端模式)还是非交互模式(cron或at) 。脚本也许需要这个信息以决定从哪里取得输入以及输出到哪里,使用test命令并带有-t选项很容易确认这一点。如果test返回值为1,则为交互模式。
简单的if else语句
下一个if语句有可能是使用最广泛的:
变量设置测试,下面的例子测试环境变量EDITOR是否已设置。如果EDITOR变量为空,将此信息通知用户。如果已设置,在屏幕上显示编辑类型。
检测最后命令状态
前面将目录名传入脚本创建了一个目录,脚本然后提示用户是否应创建目录。下面的例子创建一个目录,并从当前目录将所有 *.txt文件拷入新目录。但是这段脚本中用最后状态命令检测了每一个脚本是否成功执行。如果命令失败则通知用户。
简单的安全登录脚本
以下是用户登录时启动应用前加入相应安全限制功能的基本框架。首先提示输入用户名和密码,如果用户名和密码均匹配脚本中相应字符串,用户登录成功,否则用户退出。脚本首先设置变量为假—总是假定用户输入错误,stty当前设置被保存,以便隐藏passwd域中字符,然后重新保存stty设置。如果用户I D和密码正确(密码是myday) ,明亮INVALID_USER和INVALID_PASSWD设置为no表示有效用户或密码,然后执行测试,如果两个变量其中之一为yes,缺省情况下,脚本退出用户。键入有效的ID和密码,用户将允许进入。这是一种登录脚本的基本框架。下面的例子中有效用户ID为dave或tomotoboy。
If 条件1 //如果条件1为真 Then //那么 命令1 //执行命令1 elif 条件2 //如果条件1不成立 then //那么 命令2 //执行命令2 else //如果条件1,2均不成立 命令3 //那么执行命令3 fi //完成
简单的if语句
最普通的if语句是:
if条件
then 命令
if
使用if语句时,必须将then部分放在新行,否则会产生错误。如果要不分行,必须使用命令分隔符。本
书其余部分将采取这种形式。现在简单 if语句变为:
if 条件;then
命令
if
/home/l/g/tomotoboy >cat iftest #!/bin/sh #iftest #this is a comment line,all comment lines start with a# if [ "12" -lt "14" ] then #yes 12 is less than 14 echo "Yes, 12 is less than 14" fi /home/l/g/tomotoboy >chmod u+x iftest /home/l/g/tomotoboy > ./iftest Yes, 12 is less than 14变量值测试
不必拘泥于变量或数值测试,也可以测知系统命令是否成功返回。对 grep使用if语句找出grep是否成功
返回信息。下面的例子中 grep用于查看tomotoboy是否在数据文件sed.txt中,注意'tomotoboy'用于精
确匹配。
/home/l/g/tomotoboy >cat grepif #!/bin/sh #grep if if grep 'tomotoboy' sed.txt >/dev/null 2>&1 then echo "tomotoboy is in the file" else echo "tomotoboy is not in the file" fi /home/l/g/tomotoboy >./grepif tomotoboy is in the file
用变量测试grep输出
正像前面看到的,可以用grep作字符串操作。下面的脚本中,用户输入一个名字列表,grep在变量中查找,要求其查找指定字符串
/home/l/g/tomotoboy >cat grepstr #!/bin/sh #grepstr echo -n "Enter a piece of text file:" read TEXT echo -n "Enter a string to query: " read QUERY if grep $QUERY $TEXT >/dev/null 2>&1 then echo "$QUERY is in $TEXT" #could do some processing here... else echo "$QUERY is not in $TEXT" fi /home/l/g/tomotoboy >./grepstr -n Enter a piece of text file: sed.txt -n Enter a string to query: tomotoboy tomotoboy is in sed.txt
文件拷贝输出检查
下面测试文件拷贝是否正常,如果 cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息。注意错误信息中` basename $0`打印脚本名。如果脚本错误退出,一个好习惯是显示脚本名并将之定向到标准错误中。用户应该知道产生错误的脚本名。
/home/l/g/tomotoboy >chmod u+x ifcp /home/l/g/tomotoboy >ifcp cp: cannot access myfile ifcp: error could not copy the file /home/l/g/tomotoboy >cat ifcp #!/bin/sh #ifcp if cp myfile myfile.bak; then echo "good copy" else echo "`basename $0`: error could not copy the file" >&2 fi /home/l/g/tomotoboy >touch myfile /home/l/g/tomotoboy >ifcp good copy /home/l/g/tomotoboy >
当前目录测试
当运行一些管理脚本时,可能要在根目录下运行它,特别是移动某种全局文件或进行权限改变时。一个简单的测试可以获知是否运行在根目录下。下面脚本中变量DIRECTORY使用当前目录的命令替换操作,然后此变量值与 " / "字符串比较(/为根目录) 。如果变量值与字符串不等,则用户退出脚本,退出状态为1意味错误信息产生。
/home/l/g/tomotoboy >ifpwd You need to be in the root directory not /home/l/g/tomotoboy to run this script /home/l/g/tomotoboy >cd /etc /etc >cd / / >/home/l/g/tomotoboy/ifpwd / >cat ifpwd cat: cannot open ifpwd / >cat /home/l/g/tomotoboy/ifpwd #!/bin/sh #ifpwd DIRECTORY=`pwd` #grab the current directory if [ "$DIRECTORY" != "/" ];then #is it the root directory? #no ,the direct output to standard error,which is the screen by default. echo "You need to be in the root directory not $DIRECTORY to run this script" >&2 #exit with a value of 1, an error exit 1 fi
文件权限测试
可以用i f语句测试文件权限,下面简单测试文件sed.txt是否可写
/home/l/g/tomotoboy >ifwr sed.txt You can write to sed.txt /home/l/g/tomotoboy >cat ifwr #!/bin/sh #ifwr if [ ! -w "$1" ]; then echo "You cannot write to $1" >&2 else echo "You can write to $1" fi
测试传递到脚本中的参数
if语句可用来测试传入脚本中参数的个数。使用特定变量$#,表示调用参数的个数。可以测试所需参数个数与调用参数个数是否相等。以下测试确保脚本有三个参数。如果没有,则返回一个可用信息到标准错误,然后代码退出并显示退出状态。如果参数数目等于3,则显示所有参数。
/home/l/g/tomotoboy >cat ifparam #!/bin/sh #ifparam if [ $# -lt 3 ]; then #less than 3 parameters called,echo a usage message and exit echo "Usage: `basename $0` arg1 arg2 arg3" >&2 exit fi #good ,receive 3 params, let's echo them echo "arg1: $1" echo "arg2: $2" echo "arg3: $3" /home/l/g/tomotoboy >ifparam yang shi hai arg1: yang arg2: shi arg3: hai
决定脚本是否为交互模式
有时需要知道脚本运行是交互模式(终端模式)还是非交互模式(cron或at) 。脚本也许需要这个信息以决定从哪里取得输入以及输出到哪里,使用test命令并带有-t选项很容易确认这一点。如果test返回值为1,则为交互模式。
/home/l/g/tomotoboy >cat ifinteractive #!/bin/sh #ifinteractive if [ -t ];then echo "We are interactive with a terminal" else echo "We must be running from some background process probably cron or at" fi /home/l/g/tomotoboy >ifinteractive We are interactive with a terminal
简单的if else语句
下一个if语句有可能是使用最广泛的:
if条件 then 命令1 else 命令2 fi使用if语句的else部分可在条件测试为假时采取适当动作。
变量设置测试,下面的例子测试环境变量EDITOR是否已设置。如果EDITOR变量为空,将此信息通知用户。如果已设置,在屏幕上显示编辑类型。
/home/l/g/tomotoboy >echo $EDITOR /home/l/g/tomotoboy >cat ifeditor #!/bin/sh #ifeditor if [ -z "$EDITOR" ];then #the variable has not been set echo "Your EDITOR environment is not set" else #let's us see what is it echo "Using $EDITOR as the default editor" fi /home/l/g/tomotoboy >ifeditor Your EDITOR environment is not set /home/l/g/tomotoboy >
检测最后命令状态
前面将目录名传入脚本创建了一个目录,脚本然后提示用户是否应创建目录。下面的例子创建一个目录,并从当前目录将所有 *.txt文件拷入新目录。但是这段脚本中用最后状态命令检测了每一个脚本是否成功执行。如果命令失败则通知用户。
/home/l/g/tomotoboy >cat ifmkdir #!/bin/sh #ifmkdir DIR_NAME=testdirec #where we are? THERE=`pwd` #send all output to system dustbin mkdir $DIR_NAME >/dev/null 2>&1 #is it a directory? if [ -d $DIR_NAME ];then #can we cd to the directory cd $DIR_NAME if [ $? = 0 ];then #yes we can HERE=`pwd` echo "$HERE" cp $THERE/*.txt $HERE else echo "Cannot cd to $DIR_NAME" >&2 exit 1 fi else echo "Cannot create directory $DIR_NAME" >&2 exit 1 fi
简单的安全登录脚本
以下是用户登录时启动应用前加入相应安全限制功能的基本框架。首先提示输入用户名和密码,如果用户名和密码均匹配脚本中相应字符串,用户登录成功,否则用户退出。脚本首先设置变量为假—总是假定用户输入错误,stty当前设置被保存,以便隐藏passwd域中字符,然后重新保存stty设置。如果用户I D和密码正确(密码是myday) ,明亮INVALID_USER和INVALID_PASSWD设置为no表示有效用户或密码,然后执行测试,如果两个变量其中之一为yes,缺省情况下,脚本退出用户。键入有效的ID和密码,用户将允许进入。这是一种登录脚本的基本框架。下面的例子中有效用户ID为dave或tomotoboy。
#!/bin/sh #ifpass #set the variables to false INVALID_USER=yes INVALID_PASSWD=yes #set the current stty settings SAVEDSTTY=`stty -g` echo "You are logging into a sensitive area" echo -n "Enter your ID name:" read NAME #hide the characters typed in stty -echo echo "Enter your password :" read PASSWORD #back on again stty $SAVEDSTTY if [ "$NAME" = "tomotoboy" ] || [ "$NAME" = "dave" ]; then #if a valid then set variable INVALID_USER=no fi if [ "$PASSWORD" = "myday" ];then #if valid password then set variable INVALID_PASSWD=no fi if [ "$INVALID_USER" = "yes" ] || [ "$INVALID_PASSWD" = "yes" ];then echo "`basename $0` : Sorry wrong password or userid" exit 1 fi echo "corrent user id and password given"
发表评论
-
向脚本传递参数
2009-08-21 16:18 1655shift命令 向脚本传递参数时,有时需要将每一个参数偏移以处 ... -
shell函数
2009-08-10 00:18 1966函数由两部分组成: 函数标题。 函数体。 标题是函数名。函 ... -
后台执行命令——守护进程创建
2009-08-09 19:05 1690当你在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏 ... -
控制流结构——until、while、break、continue
2009-08-08 18:56 2771until循环 条件中1为真, ... -
控制流结构——for
2009-08-08 14:12 979for循环 for 变量名 in 列表 do 命 ... -
控制流结构——case
2009-08-06 12:53 977case语句 case语句为多选择语句。可以用case语句匹配 ... -
条件控制(test,expr……)
2009-08-04 18:23 1255测试文件状态 test test一般有两种格式,即: test ... -
再谈引号……
2009-08-04 15:37 957引号 /home/l/g/tomotoboy > ech ... -
shell变量及环境变量
2009-08-03 17:54 1510本地变量 显示变量 $GREAT_PICTURE =" ... -
登陆环境
2009-08-03 10:45 850首先看看/etc/passwd 它保存着用户名、加密后的密码等 ... -
Trap命令详解
2009-08-02 17:40 6419原文地址:http://koudai.36 ... -
ulimit命令详解
2009-08-02 17:30 2209原文地址:http://www.diybl.com/cours ... -
tr用法
2009-08-01 15:35 1789tr用来从标准输入中通 ... -
shell合并和分割
2009-07-31 12:43 2791• 实用的分类(sort)操作。 sort命令的一般格式为: ... -
shell输入输出
2009-07-31 12:38 761echo cat read 管道 '|' tee ... -
sed用法介绍
2009-07-30 15:21 2645输出第1行到第3行 -bash-3.00$ sed -n '1 ... -
awk使用
2009-07-29 16:29 1327awk 调用awk有三种方式调 ... -
shell中单引号和双引号的区别
2009-07-29 15:11 1074shell中单引号和双引号的区别 ''可以讲可执行命令文本化 ... -
grep用法详解
2009-07-29 13:45 2516grep grep一般格式为: grep [选项]基本正则表达 ... -
文本过滤
2009-07-28 00:02 7021.使用句点匹配单字符 句点“.”可以匹配任意单字符。例如,如 ...
相关推荐
流病——简答.doc
linux shell 控制流结构
第4次实验(控制流1)——分支程序设计.doc
讲述了shell中流程控制语句if_for_while_case_util_break_continue的用发和实例
流动资产——流动负债清查评估汇总表(XLS格式).xls
新词新语与流行文化——十大网络流行解读PPT课件.pptx
二、控制流结构 之 if then else P68 三、控制流结构 之 case P69 四、控制流结构 之 for循环 P70 五、控制流结构 之 until循环 P71 六、控制流结构 之 while循环 P72 七、控制循环 之 break P73 八、控制循环 之 ...
新词新语与流行文化——十大网络流行解读PPT学习教案.pptx
流动资产——应收帐款清查评估明细表.XLS
工作流管理——模型、方法和系统,不是这本书,只是它的习题解答
流动资产——其他流动资产清查评估明细表(XLS格式).xls
流动资产——待处理流动资产损失清查评估明细表(XLS格式).xls
mpeg2-节目流结构举例详解: 包括ps结构——pack结构——系统头结构——packet结构——pes头结构——视频单元结构,通过具体文件数据对照说明
从传播角度看音乐短视频流行现象——以抖音APP为例.pdf
信息系统内部控制的主要对象是信息系统,由计算机硬件、软件、人员、信息流和运行规程等要素组成 制定信息系统开发的战略规划 选择适当的信息系统开发方式 自行开发方式的关键控制点和主要控制措施 。。。。。 信息...
论文研究-短期国际资本异常流动控制分析——基于中国的实证.pdf, 本文从合理渠道与非法隐形渠道角度提出了计算中国短期资本流动量的方法;借鉴水库模型,将资本流动划分为...
基于WFMC规范的工作流引擎——Java对象模型转换为DB数据模型接口的解决方案.pdf
前端工作流.pdf————电子版_pdf版
乘势而上——人才流动与迁徙2022.pdf 乘势而上——人才流动与迁徙2022.pdf 乘势而上——人才流动与迁徙2022.pdf 乘势而上——人才流动与迁徙2022.pdf 乘势而上——人才流动与迁徙2022.pdf 乘势而上——人才流动与...