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

本文介绍了如何在Linux环境中掌握Shell编程,包括重定向、管道的使用,以及Shell中的If语句、For语句、While语句等流程控制结构的实践。通过实例演示了如何进行标准输入输出控制,以及如何编写简单的Shell脚本进行文件操作和条件判断。此外,还涉及到了Shell脚本中的变量声明和使用,以及函数的定义和调用。
摘要由CSDN通过智能技术生成

实验目的:

通过实验掌握下列知识:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值