文档库 最新最全的文档下载
当前位置:文档库 › shell程序设计

shell程序设计

shell程序设计
shell程序设计

shell编程

教学要点

1.深入理解shell概念。

2.掌握linux下shell程序设计流程。

3.理解shell程序与C程序设计的区别。

4.掌握shell程序设计中用户变量和表达式的使用方法。一.Shell编程概述

问题1:请各位同学在home目录下创建5个目录,目录名称分别为student0,student1,student2,student3,student4.且修改它们的权限为所有用户都具有完全的操作权限。

问题2:请各位同学在home目录下创建100目录,目录名称为class1—class100.

解决办法:通过一个shell脚本程序来实现,程序如下,用vi编辑器建立一个firstshell文件,内容如下:

#!/bin/bash //指明该程序被那个shell来执行!

cd /home/shelldir //进入home/shelldir目录

mkdir newdir //在shelldir目录下新建newdir目录

i=0 //给变量i赋初值

while [ $i –lt 50 ]; do //循环,判断i是否小于50,成立继续循环

let i=i+1 //让i变量值增加1

mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50

chmod 754 /home/shelldir/newdir/student$i

done

保存文件,退出vi,通过执行#chmod a+x firstshell修改文件权限,赋予文件可执行权限,通过#./firstshell或者#/bin/bash firstshell来执行程序,查看程序运行结果。

程序说明:

1.程序必须以下面的行开始(必须方在文件的第一行):

#!/bin/bash

符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/bash来执行程序。

2.当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行,必须为脚本添加可执行权限。

#chmod a+x filename

3.输入:# ./filename 来执行脚本程序。

如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序。Linux中有好多中不同的shell,通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。这些脚本同样可以在其他bash中使用。

注:1.可以通过#echo $SHELL查看当前系统所运行的shell类型;

2.可以通过#cat /etc/shells查看系统上所有的shell。

3.可以直接通过输入shell名来运行新的shell。比如#ash,启动ash。

二.为什么要进行shell编程

在Linux系统中,虽然有各种各样的图形化接口工具,但是shell 仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。

三.shell程序组成

Shell程序有注释,shell命令,变量,表达式,流程控制等组成。

1.shell程序注释

在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。初学者要养成在程序中使用注释的习惯。如果使用了注释,那么即使相当长的时间内没有使用该脚本,也能在很短的时间内明白该脚本的作用及工作原理。这种习惯对一个优秀的技术人员来说非常重要2.命令

a.linux下常用的各类命令,比如ls,cd,mkdir,pwd,rm,rmdir 等等。

b.shell中的算术运算。如 let i=i+1

3.变量

在其他编程语言中可以使用变量。在shell编程中,也有各种变量,特别是在C语言中,变量使用之前一定要先定义,然后再使用;shell程序中也可以使用各种变量,shell编程中所有的变量都由字符串组成,并且shell程序中的变量不需要提前进行声明定义,可以直接使用。如程序中所示:

i=0 //变量名=值

取出变量值可以加一个美元符号($)在变量前面:$i

Shell脚本中除了用户自己定义的变量仅在程序内有效,还有系统定义的变量,比如环境变量。由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,环境变量至关重要,在后面章节中会详细介绍。

4..shell脚本程序中的表达式

表达式是shell脚本中必不可少,如实例程序中的数学表达式

let i=i+1

shell程序中的数学表达式需要一些程序来完成,如let,expr等。Shell中还有其他的表达式比如关系表达式等如两数比较的

$i –lt 50

5.shell中的流程控制语句

课堂训练1:请大家自己编写一个shell脚本程序,来清除在前面实例中新建的所有student目录。

复习总结:

1.shell程序功能。

2.shell程序设计执行方法。

问题:如何修改配置,使得系统部出现乱码?

四.Shell程序中的变量

在Shell中有三种变量:系统变量,环境变量,用户变量。其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置。如实例1中的i变量为用户变量。

1. Shell用户变量

用户变量是最常用到的变量,使用也十分简单。用户定义的变量必须由字母数字及下划线组成,并且变量名的第一个字符不能为数字, 与其它UNIX名字一样,变量名是大小写敏感的.对于用户变量,用户变量使用时不需要提前定义,可以直接赋值使用,在引用变量时,需在前面加$符号,用户也可以在变量间进行相互赋值。例如程序实例1中的i=0。需要注意一点:变量和'='之间不要有空格,'='和赋值也不要有空格,否则shell不会认为变量被定义。对于未赋值的变量, Shell以空值对待。

2. shell 环境变量

Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默

认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。用set命令可以查看当前环境下所有的环境变量的值。常见环境变量的含义如下:PATH 命令搜索路径,以冒号为分隔符

HOME 用户home目录的路径名

COLUMNS 定义了命令编辑模式下可使用命令行的长度

HISTFILE 命令历史文件

HISTSIZE 命令历史文件中最多可包含的命令条

HISTFILESIZE 命令历史文件中包含的最大行数

SHELL SHELL的路径名

TERM 终端类型

PS1 主命令提示符

LD_LIBRARY_PATH 寻找库的路径,以冒号分隔

a.环境变量的临时查看和修改方法

通过#set查看所有环境变量,通过#echo $PATH可以查看某个环境变量的值,通过#export LC_ALL=POSIX来修改环境变量的值。

实例:

#export PS1=[tjqding@https://www.wendangku.net/doc/576983358.html,]#

//将shell操作提示符修改为[tjqding@https://www.wendangku.net/doc/576983358.html,]#

#export PATH=$PATH:/home/shellscrip

//将/home/shellscrip目录添加到搜索路径环境变量中去,这样可以在任何地方都不需要输入/home/shellscrip目录名,直接给出可执行文件名,就可以执行程序。

通过export修改环境变量,只是暂时有效,当系统重启或关闭终端,那么修改就会失去效用,如果想永久修改有效,必须修改环境变量文件。

b.环境变量的永久修改方法

通过修改环境变量文件来实现,环境变量文件一般在用户目录下,通过#ls –a可以显示,通过vi编辑器修改,保存。如解决linux 下乱码的问题,实际上就是在修改环境变量。

3.系统变量

Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候。下面是Shell常用的系统变量表示方法$1…$n $1 表示第一个参数,$2 表示第二个参数 ...

$# 命令行参数的个数

$0 当前程序的名称

$? 前一个命令或函数的返回码

$* 以"参数1 参数2 ... " 形式保存所有参数

$@ 以"参数1" "参数2" ... 形式保存所有参数

$$ 本程序的(进程ID号)PID

$! 上一个命令的PID

程序实例

#!/bin/bash

#This file is used to explain the shell system variable. echo "the number of parameter is $# "

echo "the script name is $0 "

echo "the parameters are $* "

echo "the parameters are $@ "

echo “the return code of last command is $?”

echo “the script shelleverment PID is $$”

echo $1

echo $2

echo $3

echo $4

echo "the return code of last command is $?"

总结:本节课的重点是环境变量的理解,环境变量是嵌入式系统开发中的重要概念,在嵌入式Linux 系统开发移植过程中,都要依赖环境变量。本节课主要任务如下:

1.掌握Linux系统中常见环境变量的功能以及修改方法。

2.掌握shell程序设计中系统变量的含义。

2.熟悉shell程序设计中算术运算实现的方法。

四.Shell程序中算术运算实现

Shell程序中同样可以进行多种算术运算,加减乘除,取余等,Shell程序中完成算数运算有多种方法。常见的有三种方法,使用let 命令,expr工具,以及使用$符号。

1.使用let进行算术运算

let可以进行算术运算,主要有如下:

+ 两个整数相加

- 第一个数减去第二个数

* 两整数相乘

/ 第一个整数除以第二个整数

% 两整数相除,取余数

问题1:i=9,b=i+1,c=i+b d=c*5,编写s he ll程序计算i,b,c,d的值,并且显示。

a.第一种方法,直接在命令下依次输入如下命令:

#let i=9

#let b=i+1 c=i+b

#let d=c*5

#echo $i $b $c $d

#echo $i $b $c $d

缺点:因为变量都保存在缓存中,重启系统或者终端,就会丢失。

b.编写shell程序,程序如下:

#!/bin/bash

let i=9

let b=i+1 c=i+b

let d=c*5

echo $i $b $c $d

说明:保存退出,添加可执行权限,执行程序。

2.用$[ ]和$()来进行算术运算

#!/bin/bash

i=9

b=$[$i+1]或者b=$(($i+1))

c=$[$i+$b]或者c=$(($i+$b))

d=$[$c*$b]或者d=$(($b*$c))

echo $i $b $c $d

说明:在使用方括号和圆括号完成算术运算时,切记使用格式,在括号前面一定要使用$符号,才能完成运算。

3.expr

expr可以完成类似let的功能,进行算术运算,但是expr也可以对字符串进行操作,比如测试字符串的长度,查找字符串里特定的内容,取出字符串中满足要求的字串等。

问题:i=10,b=i+1,c=i+b d=c*5,编程计算i,b,c,d的值。

a.直接在命名行下输入如下命令:

#i=10

#a=`expr $i`+ 1`

#b=`expr $i + $a`

#c=`expr $a * $b`(该操作是错误的,无法完成运算)#c=`expr $a \* $b`

#echo $i $b $c $d

注意:(1)在以命令行方式进行运算时,为变量赋值时,有两个部分容易出错,=右方要用反引号引起来,反引号是键盘左上角esc键下方的按键。

(2)在用expr完成算数运算时,运算符前后必须有空格,否则不能完成运算。

(3)在用expr完成算数运算的时,乘法运算符号*必须

用反斜杠进行转义,否则*代表通配符,表示文件名,无法完成算术运算。

b.编写shell脚本程序

#!/bin/bash

i=10

a=`expr $i`+ 1`

b=`expr $i + $a`

c=`expr $a \* $b`

echo $i $a $b $c

c.expr的字符串操作功能(补充知识点自学)

expr除了完成算术运算功能外,更多的用在字符串操作上,比如求字符串长度,提取字符串字串,比较字符串是否匹配,抽取字符串中的某个字串,测试字符串是否匹配等。

操作实例:

# string="hello,everyone my name is xiaoming"

//给字符串变量赋值。

# expr length "string" (返回值是多少?)

#expr length “$string”(返回值是多少?)

//计算string字符串的长度

# expr index "$string" m

//计算字符m在字符串中开始的位置,返回值为数字。

# expr substr "$string" 10 5

//抽取字串,表示抽取从第10个开始的5个字符的字串。

六.Shell中的比较运算的实现

Shell中实现条件判断,有各种比较运算符,比如数字比较运算符,字符串比较,文件比较判断运算符等。

1.数字比较运算

可以将实例1的程序修改为如下:

#!/bin/bash //指明该程序被那个shell来执行!

cd /home/shelldir //进入home/shelldir目录

mkdir newdir //在shelldir目录下新建newdir目录

i=0 //给变量i赋初值

while test $i –lt 50 ; do

//循环,判断i是否小于50,成立继续循环

let i=i+1 //让i变量值增加1

mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50

chmod 754 /home/shelldir/newdir/student$i

done

总结:shell中其他数据比较符号及其含义如下:

-eq 等于,如:if [ "$a" -eq "$b" ]

-ne 不等于,如:if [ "$a" -ne "$b" ]

-gt 大于,如:if [ "$a" -gt "$b" ]

-ge 大于等于,如:if [ "$a" -ge "$b" ]

-lt 小于,如:if [ "$a" -lt "$b" ]

-le 小于等于,如:if [ "$a" -le "$b" ]

< 小于(需要双括号),如:(("$a" < "$b"))

<= 小于等于(需要双括号),如:(("$a" <= "$b"))

> 大于(需要双括号),如:(("$a" > "$b"))

>= 大于等于(需要双括号),如:(("$a" >= "$b"))

2.字符串判断运算

Shell中有专门的用来测试字符串的运算符。可以用来测试字符串是否相等,字符串长度是否大于0,字符串的长度是否等于0的运算符。

常用的字符串操作符有:

= 比较两个字符串是否相同,同则为“是”

!= 比较两个字符串是否相同,不同则为“是”

-n 比较字符串长度是否大于零,如果大于零则为“是”

-z 比较字符串的穿度是否等于零,如果等于则为“是”

[“$name” = “wanglei”]

[-z “$name”]

3. 文件判断运算符

文件测试表达式通常是为了测试文件的信息,一般由脚本来决定文件是否应该备份、复制或删除。

-w file 用户可写为真

-x file 用户可执行为真

-f file 文件为正规文件为真

-d file 文件为目录为真

-c file 文件为字符特殊文件为真

-b file 文件为块特殊文件为真

-s file 文件大小非0时为真

-t file 当文件描述符(默认为1)指定的设备为终端时为真

使用实例:

[ -f "somefile" ] :判断somefile是否是一个文件

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限。

五.shell脚本中流程控制语句

1.shell流程控制

shell常见的循环语句有for循环、while循环、until循环

(1)While循环

语法:while 表达式; do

循环体

done

只要while表达式成立,do和done之间的操作就一直会进行。(2)for 循环

语法:for 变量 in 列表

do

操作

done

注:变量是要在循环内部用来指代当前所指代的列表中的那个对象的。列表是在for 循环的内部要操作的对象,可以是字符串也可以是文件,如果是文件则为文件名。

(3)until循环

语法:until 表达式

do

操作

done

重复do和done之间的操作直到表达式成立为止。

程序实例

2.条件语句

Shell程序中的条件语句主要有if语句、case语句;

(1)if语句

语法:if表达式1 then

操作1

elif表达式2 then

操作2

elif 表达式3 then

操作3

…..

Linux下shell程序设计

Linux下的Shell程序设计 Linux下的Shell程序设计 (1) 一.引言 (2) 1.1.编写目的: (2) 1.2定义: (2) 3.参考资料: (3) 二.任务的描述 (3) 2.1.目标: (3) 2.2功能描述: (3) 2.3.运行环境: (3) 2.4.条件与限制: (3) 三.任务设计 (4) 3.1.整体设计: (4) 3.2.详细设计: (5) 3.2.1.Menu模块: (5) 3.2.2. Add模块 (6) 3.2.3 Delete模块 (9) 四.实现过程 (10) 4.1.问题1 (10) 4.2.问题2 (11) 五.程序运行 (11) 5.1.程序运行的过程: (11) 5.1.1.执行效果截图 (11) 5.1.2.输入错误截图 (12) 5.1.3.选择菜单1,运行截图 (12) 5.1.4.选择菜单2,运行截图 (12) 5.1.5选择菜单3,运行截图 (12) 5.1.6 选择菜单5,运行截图 (12) 5.1.7 选择菜单6,运行截图 (13) 5.1.8 选择菜单7,运行截图 (13) 六、感想认识 (13) 七.程序代码 (14) 7.1.Menu模块 (14) 7.2.Add模块 (15) 7.3.Delete模块 (20)

一.引言 1.1.编写目的: 通过本课程设计,使学生巩固Linux和嵌入式系统的的基本概念、原理和技术,学会在Linux 系统下完成Shell程序设计。 1.2定义: 1)grep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 2)sort 将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 3)rm rm 名称源自英文单词remove的缩写,用于删除文件系统中的文件、目录、设备文件、符号链接等对象。准确地说,rm移除的指向特定对象的引用。在文件系统中,这些特定的对象可能有多个引用(例如,两个不同的文件名可能指向相同的文件), 只有在一个对象不再有任何引用,并且没有任何程序还拥有这个文件的有效句柄的时候,这个文件才会被删除。4)cat 显示或者把多个文本文件连接起来。cat是concatenate的简写,类似于dos下面的type 命令。 5)more more命令,功能类似cat。more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功能。more命令从前向后读取文件,因此在启动时就加载整个文件。 6)awk awk是一个数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。运行效率高,而且代码简单,对格式化的文本处理能力超强。awk 是”Aho Weiberger and Kernighan”三个姓的第一个字母缩写。 7)sed sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

实验二 Linux shell程序设计总结

实验二Linux shell程序设计 一、实验目的 熟悉linux shell 简单程序设计 二、实验内容 1、变量引用。在用户主目录下运行如下命令 $dir_1=/11/22 $echo $dir_1 $echo dir_1 2、数组。在用户主目录下运行如下命令 $city[0]=Beijing $city[1]=Shanghai $city[2]=Tianjin 显示city的第二个元素的值 $A=(this is an example of shell script) (1)同时显示数组A的第2、4、6个元素的值。 (2)显示所有数组元素的值 3、完成书上P106-107中关于read命令的使用的例子。 4、完成书上p108-110例4.7-例4.9

三、实验步骤 1.输入命令: $dir_1=/11/22 $echo $dir_1 $echo dir_1 2.输入命令: $city[0]=Beijing $city[1]=Shanghai $city[2]=Tianjin $echo ${city[2]} $A=(this is an example of shell script) $echo ${A[2]} ${A[4]} ${A[6]} $echo ${A[8]} 3.输入命令: $read x y z Today is Monday $echo $z $x $y $read n1 n2 n3 First Second Third 1234 abcd $echo $n3 $echo $n2 $n1

Read n1 n2 n3 1 2 $echo $n3 $echo $n1 $n2 4.4-7:$touch m1.c $vi m1.c 按”i”输入:main() { printf(“Begin\n”); } 按“Esc”输入“:wq” $cat m1.c $touch m2.c $vi m2.c 按”i”输入:main() { printf(“OK!\n”); printf(“End\n”); } 按“Esc”输入“:wq”

LINUX-Shell编程实验报告

《LINUX管理与应用》课程实验报告 ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡

一、实验过程 1. 编写一个简单的回显用户名的shell程序 2. 使用if-then语句创建简单的shell程序 3. 使用if-then-else语句创建一个根据输入的分数判断是否及格的shell程序 4. 使用for语句创建简单的shell程序 5. 使用while语句创建一个计算1-5的平方的shell程序 6. 用shell设计一个模拟考勤程序 二、实验结果 1.编写一个简单的回显用户名的shell程序 #vi dat #!/bin/bash # echo "Mr.$USER,Today is:" echo `date` echo Wish you a lucky day! #chmod +x dat #./dat 2. 使用if-then语句创建简单的shell程序 #vi bbbb #!/bin/bash # echo -n "Do you want to continue: Y or N" read ANSWER if [ $ANSWER = N -o $ANSWER = n ] then echo "your answer is quit!" fi

#chmod +x bbbb #./bbbb 3. 使用if-then-else语句创建一个根据输入的分数判断是否及格的shell程序 #vi ak #!/bin/bash # echo -n "please input a score:" read SCORE echo "You input Score is $SCORE" if [ $SCORE -ge 60 ]; then echo -n "Congratulation!You Pass the examination." else echo -n "Sorry!You Fail the examination!" fi echo -n "press any key to continue!" read $GOOUT #chmod +x ak #./ak 4. 使用for语句创建简单的shell程序 #vi mm #!/bin/bash # for ab in 1 2 3 4 do echo $ab

linux下shell 程序设计_毕业课程设计

linux下shell 程序设计 shell编程 教学要点 1.深入理解shell概念。 2.掌握linux下shell程序设计流程。 3.理解shell程序与C程序设计的区别。 4.掌握shell程序设计中用户变量和表达式的使用方法。一.Shell编程概述 问题1:请各位同学在home目录下创建5个目录,目录名称分别为student0,student1,student2,student3,student4.且修改它们的权限为所有用户都具有完全的操作权限。 问题2:请各位同学在home目录下创建100目录,目录名称为class1—class100. 解决办法:通过一个shell脚本程序来实现,程序如下,用vi编辑器建立一个firstshell文件,内容如下: #!/bin/bash //指明该程序被那个shell来执行!

cd /home/shelldir //进入home/shelldir目录 mkdir newdir //在shelldir目录下新建newdir目录 i=0 //给变量i赋初值 while [ $i –lt 50 ]; do //循环,判断i是否小于50,成立继续循环 let i=i+1 //让i变量值增加1 mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50 chmod 754 /home/shelldir/newdir/student$i done 保存文件,退出vi,通过执行#chmod a+x firstshell修改文件权限,赋予文件可执行权限,通过#./firstshell或者#/bin/bash firstshell来执行程序,查看程序运行结果。 程序说明: 1.程序必须以下面的行开始(必须方在文件的第一行): #!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/bash来执行程序。

shell程序设计

shell编程 教学要点 1.深入理解shell概念。 2.掌握linux下shell程序设计流程。 3.理解shell程序与C程序设计的区别。 4.掌握shell程序设计中用户变量和表达式的使用方法。一.Shell编程概述 问题1:请各位同学在home目录下创建5个目录,目录名称分别为student0,student1,student2,student3,student4.且修改它们的权限为所有用户都具有完全的操作权限。 问题2:请各位同学在home目录下创建100目录,目录名称为class1—class100. 解决办法:通过一个shell脚本程序来实现,程序如下,用vi编辑器建立一个firstshell文件,内容如下: #!/bin/bash //指明该程序被那个shell来执行! cd /home/shelldir //进入home/shelldir目录 mkdir newdir //在shelldir目录下新建newdir目录

i=0 //给变量i赋初值 while [ $i –lt 50 ]; do //循环,判断i是否小于50,成立继续循环 let i=i+1 //让i变量值增加1 mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50 chmod 754 /home/shelldir/newdir/student$i done 保存文件,退出vi,通过执行#chmod a+x firstshell修改文件权限,赋予文件可执行权限,通过#./firstshell或者#/bin/bash firstshell来执行程序,查看程序运行结果。 程序说明: 1.程序必须以下面的行开始(必须方在文件的第一行): #!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/bash来执行程序。 2.当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行,必须为脚本添加可执行权限。

Linux上机练习题shell程序设计基础

上机实习题: 1.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。a #!/bin/bash directory=/dev for file in /bin/a2p do if [ -f $file ] then cp $file $directory/$file.bak Fi done 2.编写一个 shell 脚本,完成功能: 1)显示文字“Waiting for a while….” 2)长格式显示当前目录下面的文件和目录,并输出重定向到 /home/file.txt 文件 3)定义一个变量,名为 s,初始值“Hello” 4)使该变量输出重定向到/home/string.txt 文件 m #!/bin/bash echo "waiting for a while… " ls -l.>/home/file.txt s=hello

echo $s > /home/string.txt 3.编写一个 shell 脚本,它把第二个位置参数及其以后的各个参数指定的文 件复制到第一个位置参数指定的目录中。b #!/bin/bash dir=$1 shift while [$1] do file=$1 cp $1 $dir shift done ls $dir 4.编写一个 shell 脚本,利用 for 循环将当前目录下的.c 文件移动到指定 的目录,并按文件大小显示出移动后指定的目录的内容。d #!/bin/bash for file in *.c

{ mv /$file/bin/a } ls -lS /bin/a 5.利用数组形式存放 10 个城市的名字,然后利用 for 循环把它们打印出 来。c #!/bin/bash city=(jinan,qingdao,rizhao,weifang,beijing,shanghai,shenzhen,guangzhou,chongqi ng,nanjing) for i in ${name[*]} do echo $i done 6.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30 个用户,用户名的形式为stdxx,其中xx从01到30。 f !/bin/bash groupadd class1 for ((i=1;i<=30;i++)) do if [ $i -lt 10 ];then username="std0"$i else username="std"$i

实验一Shell程序设计已完成

Shell程序设计 一、实验目的 1、了解和熟悉创建并使用脚本的步骤。 2、熟悉bash的控制结构。 3、学会简单的shell编程。 二、实验内容 1、创建一个简单的列目录和日期的shell 脚本并运行之。 2、用Shell 语言编制Shell 程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。 3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program”。 4、编程使用case 结构创建一个简单的菜单,屏幕显示菜单: a. Current date and time b. User currently logged in c. Name of the working directory d. Contents of the working directory Enter a,b,c or d: 三、实验步骤 1、创建一个简单的列目录和日期的shell脚本并运行之。 步骤: 键入下列命令,创建一个新文件: (1)cat >new_script (2)输入下列行: echo Your files are ls echo today is date 按回车键将光标移到一个新行,按ctrl + D 键保存并退出。 (3)检查文件内容,确保它是正确的: #cat new_script (4)运行脚本,输入它的文件名: #new_script 该脚本不运行。 (5)输入下列命令,显示文件的权限: #ls -l new_script 权限表明该文件不是可执行。要通过简单调用文件名来运行脚本,必须有权限。 (6)输入下列命令,使new_script变成可执行文件。 chmod +x new_script (7)要查看新的权限,输入: ls-l 现在拥有文件的读、写和执行权限。 (8)输入新脚本的名字以执行它: new_script 所有输入到文件的命令都执行,并输出到屏幕上。

LinuShell程序设计实验

Linux shell程序设计实验指南 请在vi中逐一编辑并执行以下10个shell脚本程序,然后结合所学知识和程序的输出分析各程序中各语句的含义: 1.编写一个简单的回显用户名的shell程序。 #!/bin/bash #filename:date echo "Mr.$USER,Today is:" echo 'date' echo Whish you a lucky day! 2.使用if-then语句创建简单的shell程序。 #!/bin/bash #filename:bbbb echo -n "Do you want to continue: Y or N" read ANSWER if [ $ANSWER=N -o $ANSWER=n ] then exit fi 3.使用if-then-else语句创建一个根据输入的分数判断是否及格的shell程序。 #!/bin/bash #filename:ak echo -n "please input a score:" read SCORE echo "You input Score is $SCORE" if [ $SCORE -ge 60 ]; then echo -n "Congratulation!You Pass the examination." else echo -n "Sorry!You Fail the examination!" fi echo -n "press any key to continue!" read $GOOUT 4.使用case语句创建一个菜单选择的shell程序。 #!/bin/bash #filename:za #Display a menu echo _ echo "1 Restore"

7Shell编程

实训项目7 Shell 编程 一、实训目的 ● 掌握Shell 环境变量、管道、输入输出重定向的使用方法。 ● 熟悉Shell 程序设计。 二、项目背景 某单位的系统管理员计划用Shell 编程编写一个程序实现USB 设备的自动挂载。程序的功能如下: ● 运算程序时,提示用户输入“y ”或“n ”,确定是不是挂载USB 设备。 ● 如果用户输入“y ”,则挂载这个USB 设备。 ● 提示用户输入“y ”或“n ”,确定是不是复制文本。 ● 如果用户输入“y ”,则显示文件列表,然后提示用户是否复制文件。 ● 程序根据用户输入的文件名复制相应的文件,然后提示是否将计算机中的文件复制到USB 中。 ● 完成文件的复制以后,提示用户是否卸载USB 设备。 三、实训内容 练习Shell 程序设计方法及Shell 环境变量、管道、输入输出重定向的使用方法。 四、实训步骤 ●在Linux 系统的图形界面下利用Vi 编辑器输入程序代码,部分主要程序代码如下。 ● 将文件保存为/program/usb.sh ,并利用chmod 命令修改usb.sh 的权限,使其可以执行。 ● 设置PATH 环境变量,将/program 目录添加到系统的PATH 环境变量中,使得每次直接执行 usb.sh

就可以完成U盘的自动挂载。 ●去掉usb.sh的执行权限,将改文件的内容分别利用输出重定向输出到/program/usbbak.sh文件和屏幕上。 五、实训思考题 1.将本实训的USB项目的程序完成,并进行实际测试。写出测试环境和测试结果。 2.修改系统的配置文件,使得usb.sh文件在用户每次登陆系统的时候可以自动执行。 六、实训报告要求 ●实训目的。 ●实训内容。 ●实训步骤。 ●实训中的问题和解决方法。 ●回答实训思考题。 ●实训心得与体会。 ●建议与意见。 1

题目1 shell 程序设计

题目1 shell 程序设计 1.1 实验目的 Linux操作系统中shell是用户与系统内核沟通的中介,它为用户使用操作系统的服务提供了一个命令界面。用户在shell提示符($或#)下输入的每一个命令都由shell先解释,然 后传给内核执行。本实验要求用C语言编写一个简单的shell程序,希望达到以下目的: ●用C语言编写清晰易读、设计优良的程序,并附有详细的文档。 ●熟悉使用Linux下的软件开发工具,例如gcc、gdb和make。 ●在编写系统应用程序时熟练使用man帮助手册。 ●学习使用POSIX/UNIX系统调用、对进程进行管理和完成进程之间的通 信,例如使用信号和管道进行进程间通信。 ●理解并发程序中的同步问题。 ●锻炼在团队成员之间的交流与合作能力。 1.2 实验要求 1.2.1 ysh解释程序的重要特征 本实验要实现一个简单的命令解释器,也就是Linux中的shell程序。实验程序起名为ysh,要求其设计类似于目前流行的shell解释程序,如bash、csh、tcsh,但不需要具备那么复杂的功能。ysh程序应当具有如下一些重要的特征: ●能够执行外部程序命令,命令可以带参数。.。 ●能够执行fg、bg、cd、history、exit等内部命令。 ●使用管道和输入输出重定向。 ●支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前 运行作业的前台/后台状态,以及控制作业的挂起、中止和继续运行。 除此之外,在这个实验中还须做到: ●使用make工具建立工程。 ●使用调试器gdb来调试程序。 ●提供清晰、详细的设计文档和解决方案。 1.2.2 ysh解释程序的具体要求 1. Shell程序形式 本实验的ysh程序设计不包括对配置文件和命令行参数的支持。如果实现为像bash那样支持配置文件,当然很好,但本实验并不要求。ysh应提供一个命令

实验1 Shell程序设计

齐鲁工业大学实验报告成绩 一、实验目的及要求 理解Shell程序的设计方法; 熟悉Shell程序编辑、运行、调试方法与过程。 二、实验过程及结果【相应实验步骤中的主要操作过程、核心源码及运行结果截图】 1.编写一个简单的回显用户名的shell程序 #vi dat #!/bin/bash #filename:dat echo "Mr.$USER,Today is:" echo `date` echo Wish you a lucky day! #chmod +x dat #./dat 2.使用for语句创建简单的shell程序 #vi mm #!/bin/bash #filename:mm for ab in 1 2 3 4 do echo $ab done

#chmod +x mm #./mm 3.使用while语句创建一个计算1-5的平方的shell程序 #vi zx #!/bin/bash #filename:zx int=1 while [ $int -le 5 ] do sq=`expr $int \* $int` echo $sq int=`expr $int + 1` done echo "Job completed" #chmod +x zx #./zx … 三、实验总结及收获【学到的知识和技能、遇到的问题及解决方案、心得体会等】

通过这次实验,我懂得了定义SHELL程序设计中的变量,掌握了SHELL程序中LINUX 基本命令的使用,理解了Shell程序的设计方法,并且熟悉了Shell程序编辑、运行、调试方法与过程。这为我日后继续深入学习Linux课程打下基础。

考勤模拟shell程序设计(推荐文档)

实验报告 课程名称:Linux程序设计 实验项目:考勤模拟shell程序设计专业班级:计算机科学与技术0903 姓名:学号: 实验室号:信息楼实验组号: 实验时间:2012.12.15 批阅时间: 指导教师:李威成绩:

沈阳工业大学实验报告 一.实验名称: 考勤模拟shell程序设计 二.实验目的: 理解Shell程序的设计方法;熟悉Shell程序的编辑、运行、调试方法与过程。 三.实验内容: 考勤模拟Shell程序设计 用shell设计一个模拟考勤程序,实现如下功能选择界面: 1:上班签到 2:下班签出 3:缺勤信息查阅 考勤程序运行后,提示用户输入上述功能选择,并验证用户输入的用户名和密码;用户信息保存在userinfo.dat中。 如果是上班签到,记录签到信息,如果签到时间大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat中。 如果是下班签出,记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat。 如果用户选择确信信息查询,则将check.dat中对应的用户迟到早退的信息查询出来并显示。 用户选择功能执行完,Shell程序继续回到功能选择界面等待下一个用户进行操作。

四.实验要求: 1、掌握Shell程序的编辑、运行、调试方法 2、完成实验内容要求是现的功能 3、撰写实验报告 五.试验运行代码: #! /bin/bash exsig=0 while true; do echo "" echo "----欢迎使用本系统----" echo " 1. 上班签到" echo " 2. 下班签出" echo " 3. 考勤信息查询" echo " 4. 退出系统" echo "----------------------" echo "" echo "请输入你的选项:" read choice case $choice in 1)echo "请输入你的名字:" read name echo "请输入你的密码:" read password if test -r /home/user/userinfo.dat then while read fname fpassword do echo "$fname" echo "$fpassword" if test "$fname" = "$name" then break fi done < /home/user/userinfo.dat else echo System Error:userinfo.dat does not exist! fi if test "$fname" != "$name" then

Linux上Shell程序设计实验报告

深圳大学实验报告 课程名称:Linux操作系统 实验项目名称:Linux上shell程序设计 学院:计算机与软件学院 专业:软件工程 指导教师:冯禹洪 报告人:文成学号:2011150259 班级: 2 实验时间:2013-10-08 实验报告提交时间:2013-10-30 教务处制

一、实验目标: 1. 熟悉vi编辑器的使用 2. 掌握简单的Shell编程 2.1. 掌握Shell变量的使用 2.2. 掌握Shell表达式的使用 2.3. 掌握Shell流程控制语句的使用 3. 熟悉Shell程序的执行和跟踪 二、实验环境与工件 湖边Linux实验室 Fedora 13 三、实验内容与步骤 1. 下面哪个命令会实现将变量V AR1和V AR2相加,并且值存入变量V AR3的功能?( D )(5分) [ $V AR3 = $V AR1 + $V AR2 ] $V AR3 = [ $V AR1 + $V AR2 ] $V AR3 = (( V AR1 + V AR2 )) (( V AR3 = V AR1 + V AR2 )) 2. 以下程序的输出是?( D )(5分) #!/usr/bin/sh A=1 while [ $A -lt 10 ] do B=1 while [ $B -lt 10 ] do break 2 echo "Inner loop" done echo "Outer loop" done A.“Inner l oop” 将被打印10次 B.“Outer l oop” 将被打印10次. C.“Outer l oop” 将被打印10次. D.什么都没有被打印.

shell程序设计(通信)1报告

Shell程序设计 本章的学习目标 ●了解shell的地位和作用 ●熟练掌握shell脚本的建立与执行方法 ●掌握shell的变量及特殊字符 ●掌握shell的输入输出命令 ●掌握shell程序逻辑结构语句 主要内容 ● Shell概述 ● Shell的变量 ● Shell中的特殊字符 ●Shell编辑中的输入输出命令 ● Shell结构控制语句 Shell简介 1、Shell的功能(1)作为命令解释程序 (2)作为一种高级程序设计语言 shell是一种命令行解释程序,它提供了用户与操作系统之间基于命令行的交互界面。用户命令行输入命令,由SHELL对它们做出解释,并将其送往操作系统去执行。然而,它不仅仅是一种交互式语言,它还是一种可编程的程序设计语言。将若干个shell命令写入一个文件就构成了一个shell程序,它可以被shell逐条的解释执行。 Shell简介 shell程序可以使用各种变量、参数和控制结构来组织命令流程,自动化的完成各种复杂冗繁的处理工作。 shell是基于字符串的语言:只做字符串处理,不支持复杂的数据结构和运算。Shell 输出也全部是字符方式。 2、Shell的主要版本:sh csh ksh 在linux系统中流行的使用的shell主流是Bash,它是Bourne Again Shell的缩写,bash 是由bourne shell发展而来的,但是它包含了csh和ksh的特性。 shell脚本的建立与执行 ●shell脚本的建立 ●Shell脚本是文本文件,可以用任何文本编辑器建立和编辑脚本,shell脚本文件 的名称没有限定的扩展名,通常不带扩展名或带“.sh”扩展名。 ●①vi shell脚本名 ●②cat >文件名 ●。。。。。 Ctrl+d 例9.1 第1个Shell程序: $ cat hello #hello程序 # This is a shell script to say hello. echo Hello World! echo -n “Today is ” date “+%A, %B %d, %Y.” $ . hello #运行hello程序 Hello World!

实验3:Shell程序设计

实验报告3 课程名称:Linux驱动程序开发实验名称:Shell程序设计 学生姓名:班级:学号: 指导老师:钱振江成绩: 一、实验目的 1.Shell程序设计中变量的使用; 2.理解通道的概念并初步掌握它的使用方法; 3.掌握算术操作、字符串操作、逻辑操作、文件操作; 4.掌握if then fi、if then elif fi、case、while、for等控制语句; 5.在shell脚本中使用函数; 二、实验任务与要求 1.通过对shell程序的调试,理解变量$#,$0,$1,$2,$3,$@的含义; 2.Shell顺序程序设计; 3.Shell分支程序与多分支程序设计; 4.Shell循环程序设计。 三、实验工具与准备 计算机PC机,Linux Ubuntu操作系统 预备知识 1.环境变量:$HOME; $PATH; $PS1; $1~$9; $*; $@; $#; $$; $?; $!等。 $0是一个内部变量,它是必须的,而$1则可有可无,最常用的内部变量有$0、$#、

$?、$*,它们的含义如下: ?$0 :命令所在的路径 ?$# :传递给程序的总的参数数目 ?$? :shell程序在shell中退出的情况,正常退出返回0,反之为非0值 ?$* :传递给程序的所有参数组成的字符串 2.字符串比较有=、!=、-n、-z;算术运算有-eq、-ge、-le、-ne、-gt、-=lt;逻辑运算有!、-a、-o;文件测试-d、-f、-x等; 3.for 循环 ?语法: for 变量in 列表 do 操作 done 4.while循环 ?语法: while 表达式 do 操作 done 5.until循环 ?语法: until 表达式

实验五 Shell程序设计

实验五Shell程序设计 1.编写一个Shell程序findit,该程序搜索参数1指定的目录树,查找所有的以.c和.h结尾的文件,如文件行中含有参数指定的字符串,显示该行和相应的文件名。如目录参数1缺省,则从当前目录中搜索。如:findit /home/wang/work searchstring 搜索以/home/wang/work为根的目录树中的c程序和头文件,查找含有searchstring字符串的行,显示文件名。 findit searchstring 从当前目录开始搜索。 2.编一Shell程序,以类似书本的目录结构的形式,按层次输出当前目录树中的所有目录和文件,要求每一层缩进4个空格。 /* sockcom.h */ #include #include #include #include #include #include #include #include #define BUFSIZE 1024 #define PORT 3333 typedef struct fileinfo { char fname[50]; long length; }FILEINFO, *Pfileinfo; /* * SocketServer.c * */ #include "sockcom.h" int initSocket() { int sockfd, length; struct sockaddr_in server; char buf[BUFSIZE];

Linux上机练习题shell程序设计基础

上机实习题: 1.用编程,判断一文件是不是字符设备文件,如果是将其拷贝到目录下。a 2p [ $ ] $ $$ 2.编写一个脚本,完成功能: 1)显示文字“ a ….” 2)长格式显示 当前目录下面的文件和目录,并输出重定向到文件 3)定义一个变量,名为 s,初始值“” 4)使该变量输出重定向到文件 m " a … " .> $s >

3.编写一个脚本,它把第二个位置参数及其以后的各个参数指定的文件复 制到第一个位置参数指定的目录中。b $1 [$1] $1 $1 $ $ 4.编写一个脚本,利用循环将当前目录下的文件移动到指定的目录,并 按文件大小显示出移动后指定的目录的内容。d * { /$

} 5.利用数组形式存放 10 个城市的名字,然后利用循环把它们打印出来。 c () i ${[*]} $i 6.设计一个程序,添加一个新组为1,然后添加属于这个组的30个用户,用 户名的形式为,其中从01到30。 f 1 ((1<=30)) [ $i 10 ] "0"$i ""$i 1 $

7.编写程序,实现自动删除50个账号的功能。账号名为1至50。 1 [$10] [$10] 0${i} ${i} ' $1' 8.请写出下列程序在命令行执行#3 100 运行后的结果(程序名为3)。 “ $# .” “ :$0” “1 :$1”

“2 :$1” “3 :$3” 9.设计一个菜单驱动程序。如下: : P: S: D: ’s L: W: Q: : 菜单程序将根据用户输入的选择项给出相应信息。要求对用户的输入忽略大小写,对于无效选项的输入给出相应提示。要求使用语句实现以上功能,输入响应的字母后应该执行响应的命令完成每项功能,如输入P,就执行命令。 #! # " :" " 's " " " " " " " "$" D) ;; L) ;; W) ;; Q) 0;;

Linux上Shell程序设计

深圳大学实验报告课程名称:Linux操作系统 实验项目名称:Linux上shell程序设计学院:计算机与软件学院 专业: 指导教师:冯禹洪 报告人:学号:班级: 实验时间: 实验报告提交时间: 教务处制

一、实验目标: 1. 熟悉vi编辑器的使用 2. 掌握简单的Shell编程 2.1. 掌握Shell变量的使用 2.2. 掌握Shell表达式的使用 2.3. 掌握Shell流程控制语句的使用 3. 熟悉Shell程序的执行和跟踪 二、实验环境与工件 湖边Linux实验室 Fedora 13 三、实验内容与步骤: 准备工作:如果当前系统已经有学生名字加学号命名的账号,则直接以该账号登录,然后转2,一次完成后面的实验内容。 i.创建一个以学生名字加学号命名的账号,不如,学生名字 为张山,学号为123,则操作如下: #useradd zhangshan123 #passwd zhangshan123 然后以zhangshan123名字登录 ii.在主目录下 a)创建文件夹:ShellProgram $mkdir ShellProgram b)进入ShellProgram子目录 $cd ShellProgram iii.请根据自己对Linux的熟悉程度选做题(一)或题(二) 题(一) 1. 下面哪个命令会实现将变量V AR1和V AR2相加,并且值存入变量V AR3的功能?()(5分)

A.[ $VAR3 = $VAR1 + $VAR2 ] B.$VAR3 = [ $VAR1 + $VAR2 ] C.$VAR3 = (( VAR1 + VAR2 )) D.(( VAR3 = VAR1 + VAR2 )) 2. 以下程序的输出是?()(5分) #!/usr/bin/sh A=1 while [ $A -lt 10 ] do B=1 while [ $B -lt 10 ] do break 2 echo "Inner loop" done echo "Outer loop" done A.“Inner l oop” 将被打印10次 B.“Outer l oop” 将被打印10次. C.“Outer l oop” 将被打印10次. D.什么都没有被打印. 3. 请在vi中逐一编辑,修正(如果有误)并执行以下10个shell脚本程序,然后结合所学知识和程序的输出理解各程序中各语句的含义,对各小题附上结果截图。(每小题5分) 3.1. 编写一个简单的回显用户名的shell程序。 #!/bin/bash #filename:date echo "Mr.$USER,Today is:" echo 'date' echo Whish you a lucky day! 3.2.使用if-then语句创建简单的shell程序。 #!/bin/bash

《Linux应用程序设计》复习题2

.一、选择题 1.下面哪个命令是用来定义shell的全局变量( D ) A. exportfs B. alias C. exports D. export 2. 将当前目录下的文件shell.sh移动到目录/home/linux下的命令为(B)。 A. cp shell.sh /home/linux B. mv shell.sh /home/linux C. lls shell.sh / home/linux/shell.sh D. mv /root/shell.sh /home/linux/shell.sh 3.如果要列出一个目录下的所有文件需要使用命令行( C )。 A. ls –l B. ls-t C. ls –a D. ls –d 4.Linux 下Makefile文件中,表示第一个依赖目标的系统变量是(C) A.$@ B.$* C.$< D.$# 5.32位系统下,定义一个指向字符类型的变量short i,那么sizeof(i)的值是( B ) A.1 B.2 C.3 D.4 6.在用ls –l 查看文件属性时,字符设备文件类型的标志是( A ) A.c B.b C.s D.l 1、- -------------- 普通文件 2、d -------------- 目录文件 3、l -------------- 符号连接 4、c -------------- 字符设备文件 5、b -------------- 块设备文件 7. 在linux下进行shell编程时,注释符是(A)。 A. # B. // C. /* */ D. 以上都不对 8. 任何时候用户需要回到用户主目录时可以使用命令(A)。 A. cd B. pwd C. path D. cd . 9. 下列属于文件包含的命令是(C)。 A. #define N 25 B. #endif C. #include "stdio.h" D. #else 10. 下列关于Linux安装的说法中,不正确的是(C)。 A.如果计算机的内存为128MB,则SWAP分区(交换分区)的大小通常设定为256M。 B.安装时Linux分区的文件系统类型一般为ext2或ext3。 C.安装时要进行磁盘分区,如果选择“自动分区”,系统会自动保留硬盘上原来的数据。 D.Linux除了可以从光盘安装外,还可以从网上下载Linux的iso映像文件,从硬盘安装。 11. 下列说法中,不正确的是 A 。 A. Shell程序编写完后还需要用gcc编译器编译。

相关文档