实验目的:
通过实验掌握下列知识:
1、掌握在Linux下的重定向和管道。
2、掌握Linux系统下的Shell编程中的变量声明和使用。
3、熟悉在Linux环境下的Shell编程的If语句,elif语句,for语句,while语句,until语句以及case语句。
内容及步骤:
一、
重定向和管道
1、I/O命令
(1)管道(pipe-line)的使用
执行格式: command1|command2
功能:将command1的执行结果送到command2 作为输入
例: ls -R1|more
以分页方式列出当前目录文件及子目录名称;
cat
file1|more
以分页方式,列出file1的内容
ps | sort |
more|
(2)标准输入控制
执行格式:command-line
将file作为command-line的输入
例:mail -s
test”user@iis.sinica.edu.tw
功能:将文件file1当作信件的内容,subject
名称为mail
test送给收信人
(3)标准输出控制
执行格式一:command>filename
功能:将command的执行结果送至指定的filename中
例:ls -l
>list
将执行”ls
-l”
的结果写入文件list中
执行格式二:command>!filename
功能:同上,若filename文件已存在,则强迫重写
执行格式三:command>&filename
功能:将command执行所产生的任何信息写入filename
执行格式四:command>>filename
功能:将command 的执行结果,附加(append)到filename
执行格式五:command>>&filename
功能:将command执行所产生的任何信息附加于filename中
二、
掌握Linux环境下的shell编程
(1)shell
是交互式程序设计方式
例1.显示hello
world
#!/bin/bash
echo “Hello
world”
在程序执行时会出现“当前用户没有权限的提示”,利用chmod,获取hello.sh的文件权限。
例2.显示变量$a
#!/bin/bash
a=”Hello
world”
echo “A is:”
$a
例3.变量混淆$a
#!/bin/bash
num=2
(空格)
echo "this is the
$numnd"
会显示出this is the,
修改为echo "this is the {$num}nd"
三、
shell编程的If语句,elif语句,for语句,while语句,until语句以及case语句
(2) "if"
表达式
"if"
表达式如果条件为真则执行then后的部分:
代码:
if ....;
then
....
elif ....;
then
....
else
....
fi
例4.显示目前的$SHELL版本
#!/bin/bash
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
例5.使用read,进行判断
#!/bin/bash
echo “pls input
sh”
read sh
if [ $Sh = "/bin/bash"
];
then (空格)
echo "your login shell is the bash (bourne again
shell)"
else
echo "your login shell is not bash but
$Sh"
fi
[ -f "somefile"
] :判断是否是一个文件
[ -x "/bin/ls" ]
:判断/bin/ls是否存在并有可执行权限
[ -n "$var" ]
:判断$var变量是否有值
[ "$a" = "$b" ]
:判断$a和$b是否相等
(3) "for"
表达式
"for"表达式查看一个字符串列表
(字符串用空格分隔)
然后将其赋给一个变量:
代码:
for var in ....;
do
....
done
例6.利用for命令循环显示
A
B C
#!/bin/bash
for var in A B C;
do
echo “Var is $var”
done
例7.把目录中每个文件在一个backup子目录中建立备份
#!/bin/bash
mkdir backup
for file in
$(ls)
do
cp
$file backup/$file
if [ $? –ne 0 ];
then
echo “copying $file error”
fi
done
(4) case ...
in
...) do something here
;;
esac
例8. smartzip的脚本
#!/bin/bash
ftype=`file
"$1"`
case "$ftype"
in
"$1: Zip
archive"*)
unzip "$1" ;;
"$1: gzip
compressed"*)
gunzip "$1" ;;
"$1: bzip2
compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be
uncompressed with smartzip";;
esac
(5) select
表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。
select var in ... ;
do
break
done
例9. 选择你喜欢的OS系统
#!/bin/bash
echo "What is your favourite
OS?"
select var in "Linux" "Gnu
Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected
$var"
(6) while ...;
do
....
done
例10. 输入密码
#!/bin/bash
echo "pls input
password"
read pw
while [“$pw” != “secret”
];
do
echo “the password is not
correct”
read pw
done
exit 0
(7) until
condition
do
statements
done
例11. 输入密码
#!/bin/bash
until who | grep “$1”
> /dev/null
do
sleep
60
done
echo –e \\a
echo “**$1 has just logged in
**”
exit 0
(8)
shell函数
function_name
()
{
statements
}
例12. foo函数
#!/bin/bash
foo ()
{
echo
“Function!”
}
echo “script
starting”
foo
echo “script
ended”
exit 0
习题一
#!/bin/sh
#first
#This file looks through all
the files in the current
#directory for the string
POSIX, and then prints the names of
#those files to the standard
output.
for file in
*
do
if grep -q linux
$file
then
echo $file
fi
done
exit 0
习题二
$
salutation=Hello
$ echo
$salutation
Hello
$
salutation=”Yes
Dear”
$ echo
$salutation
Yes Dear
$
salutation=7+5
$ echo
$salutation
7+5
习题三
#!/bin/sh
if [ -f /bin/bash
]
then
echo
“file /bin/bash exists”
fi
if [ -d /bin/bash
]
then
echo
“/bin/bash is a
directory”
else
echo
“/bin/bash is NOT a
directory”
fi
习题四
#!/bin/sh
echo “Is it morning? Please
answer yes or no”
read
timeofday
if [ $timeofday = "yes" ];
then
echo "Good
morning"
else
echo "Good
afternoon"
fi
exit 0
习题五
#!/bin/sh
echo "Is it morning? Please
answer yes or no"
read
timeofday
if [ $timeofday = "yes"
]
then
echo "Good
morning"
elif [ $timeofday = "no" ];
then
echo "Good
afternoon"
else
echo "Sorry, $timeofday not
recognized. Enter yes or no"
exit 1
fi
exit 0