2〕、以脚本名作为Shell参数的执行方式
sh脚本名[参数]如:
shprog
3〕、改执行权限后直接执行方式
如:
#chmoda+xprog
#./prog
3、Shell变量:
1〕、可写的环境变量
$echo$PS1
$PS1=“[\u@@@wdg-Linux-9]”
2)、位置参数:
在命令行传递给shell脚本的参数。
〔1〕位置参数及引用
可以编写一个shell脚本,当从命令行或者从其他shell脚本中调用它的时候,这个脚本接收假设干参数。
这些选项是通过Linux作为位置参数〔positionalparameter〕提供应shell程序的。
在shell脚本中应有变量,接收实参,这类变量的名称很特别,分别是1,2,3,…,这类变量称为位置变量。
位置参数1存放在位置变量1中,位置参数2存放位置变量2中,……,在程序中可以使用$1,$2,……来访问。
下述是一个shell程序的mypgm1,只带了一个参数〔名字〕,并在屏幕上显示这个名字:
#Namedisplayprogram1
if[$#-eq0]
then
echo“Namenotprovided”
else
echo”Yournameis$1”
fi
在pdksh和bash中,如果执行mypgm1如下:
#.mypgm1
将得到输出:
Namenotprovided
但是,如果执行mypgm1如下:
#.mypgm1sanjia
则得到如下的输出:
Yournameissanjia
〔2〕用set命令为位置参数赋值
在shell程序中可以利用set命令为位置参数赋值或重新赋值。
〔1〕一般格式:
set [参数表]
〔2〕说明:
该命令后面无参数时,将显示系统中的系统变量的值;如果有参数将分别给位置参数赋值。
3)、用户自定义变量:
a、字符串赋值,格式如下:
变量名=字符串
如:
$mydir=/home/a
$echo$mydir
$echomydir
b、如果在赋给变量的值中要含有空格、制表符或换行符,那么就应该用双引号把这个字符串括起来。
$myname=“zhangsan”
c、变量值可以作为某个长字符串中的一部分。
如果它在长字符串的末尾,就可以利用直接引用形式。
$s1=ing
$echowalk$s1orread$s1orleep$s1
如果它在长字符串的开头或中间,应该用{}把变量名括起来。
$dir=/home/user1
$echo${dir{}m1.c
4)、用不带参数的set命令可以显示所有“shell变量〔包括用户自定义变量〕名以及它们的当前值。
$set<回车>
4、Shell中的引号:
1〕、双引号〔“”〕
双引号括起来的字符,除$、倒引号、和反斜线(\)仍保留其特殊功能外,其余字符通常作为普通字符对待。
如:
$echo“Mycurrentdiris`pwd`”
$echo“Mycurrentdiris$HOME”
2)、单引号〔‘’〕
单引号内所有字符均作为普通字符对待。
如:
$echo‘Mycurrentdiris`pwd`’
3)、倒引号〔``〕
倒引号括起的字符串被Shell解释为命令行,在执行时先执行该命令行,并以它的标准输出结果取代整个倒引号部分。
常用的方式有以下几种:
(1)、Shell解释执行
如:
$echocurrentdiris`pwd`
(2)、利用倒引号的Shell解释功能可以进行命令替换,即把倒引号中的命令的结果赋给指定变量。
如:
$mypath=`pwd`
$echoMydiris$mypath
(3)、倒引号的嵌套应用,倒引号的嵌套时必须在内层的一组倒引号用反斜线〔\〕进行转义。
如:
$mypath=`echomydiris\`pwd\``
$echo$mypath
程序实例:
1、创建一个简单的列目录和日期的shell脚本并运行之。
步骤:
1入以下命令,创建一个新文件:
cat>new_script
⑵输入以下行:
echoYourfilesare
ls
echotodayis
date
按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:
#catnew_script
⑷运行脚本,输入它的文件名:
#new_script
该脚本不运行。
⑸输入以下命令,显示文件的权限:
#ls–lnew_script
权限说明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入以下命令,使new_script变成可执行文件。
chmod+xnew_script
⑺要查看新的权限,输入:
ls–l
现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:
new_script
所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比方:
commandnotfound
输入以下命令:
#./new_script
日4月112:
37:
00CST2012
该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
2.编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同示“Match”,并显示“Endofprogram”,如果不同则显示“Endofprogram”。
提示:
echo–n是显示内容,但不回车换行。
$cat>if1
echo–n“word1:
”
readword1
echo–n“word2:
”
readword2
iftest“$word1”=“$word2”
then
echo“Match”
fi
echo“Endofprogram.”
<程序说明>
①if,then控制结构的语法是:
iftest_command
then
commands
fi
②其中test_command为test“$word1”=“$word2”,test是一个内置命令,如果它的第一个参数和第三个参数存在第二个参数所指定的关系,那么test将返回ture。
Shell将执行then和fi之间的命令。
否则执行fi后面语句。
修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,
两个单词相同显示“Match”,不同则显示“Notmatch”,最后显示“Endofprogram”。
<编程提示>请使用if,then,else控制结构。
3、编程使用case结构创建一个简单的菜单,屏幕显示菜单:
a.Currentdateandtime
b.Usercurrentlyloggedin
c.Nameoftheworkingdirectory
d.Contentsoftheworkingdirectory
Entera,b,cord:
根据用户输入选项做相应操作。
<参考程序>
echo–e“\nCOMMANDMENU\n”
echo“a.Currentdateandtime”
echo“b.Usercurrentlyloggedin”
echo“c.Nameoftheworkingdirectory”
echo“d.Contentsoftheworkingdirectory\n”
echo–n“Entera,b,cord:
”
readanswer
echo
case“$answer”in
a)date;;
b)who;;
c)pwd;;
d)ls;;
*)
Echo“Thereisnoselection:
$answer”;;
Esac
4.用if,then,else控制结构编写一段shell小程序,根据执行时候获取的当前时间显示出不同的问候信息。
#!
/bin/bash
a=`date+%H`
if(test$a-lt12);
then
echo"GoodMorning!
"
else
echo"GoodAfternoon!
"
fi
四、实验结果
1.shell脚本的建立同建立普通文本文件的方式相同,可利用编辑器vi或cat命令,进行程序录入和编辑加工。
由三条简单命令组成的Shell程序,文件名为prog。
ls–l
cal
who
2.shell脚本的执行(通常用三种方式)
3.Shell变量:
1〕、可写的环境变量
2)、位置参数:
在命令行传递给shell脚本的参数。
〔2〕用set命令为位置参数赋值
3)、用户自定义变量:
4)、用不带参数的set命令可以显示所有“shell变量〔包括用户自定义变量〕名以及它们的当前值。
5、Shell中的引号:
程序实例:
1、创建一个简单的列目录和日期的shell脚本并运行之。
2.编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同示“Match”,并显示“Endofprogram”,如果不同则显示“Endofprogram”。
提示:
echo–n是显示内容,但不回车换行。
3、编程使用case结构创建一个简单的菜单,屏幕显示菜单:
五、实验总结
通过这次试验,我了解了常用shell的编程特点以及shell程序设计的基础知识。
认识并且理解了shell程序流程控制、shell程序的运行方式、shell程序的调试方法。
通过仔细做这次试验,对于shell的编程方法和技巧的知识有了进步,在看出一些眉目,学会了shell编程的一些小知识之后,感觉还是挺有意思的。