linux实验三shell,实验三 Linux的重定向和管道、Shell编程

  • Post author:
  • Post category:linux


实验目的:

通过实验掌握下列知识:

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

“mail

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