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

shell程序设计(通信)1

shell程序设计(通信)1
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!

Today is Saturday, October 13, 2015.

$

这个hello程序的第1行是注释,后面3行是命令。在执行此程序时,Shell依次执行这3个命令并输出显示信息。

shell脚本的建立与执行

●shell脚本的执行方式主要有3种

●(1) 将脚本作为可执行文件执行:

$ chmod a+x hello

$ ./hello

用文本编辑器生成的脚本文件默认是没有x权限的,也就是说是不可直接执行的。赋予x权限后,脚本就可以像一般的Shell命令那样执行了。如果脚本不在系统存放命令的标准目录下,需要在执行时指定脚本的路径。上例中脚本hello放在当前目录下,所以要用./hello来运行。

shell脚本的建立与执行

(2) 启动一个Shell子进程来执行脚本文件:

$ sh hello #或sh < hello

执行此命令行时,Shell进程先启动一个bash子进程,让它执行hello脚本的内容,执行完毕后bash子进程也终止。在这种方式中,脚本是作为命令参数传给子Shell的。子Shell运行时读取该文件并执行其内容,因此脚本文件不必有执行权限。

shell脚本的建立与执行

(3) 让当前Shell进程执行脚本文件:

$ . hello #注意.后面的空格

“.”是一个Shell内部命令,hello是它的参数。“.”命令的功能是读取参数指定的文件,执行其内容。这种执行方式与第2种方式类似,区别在于此方式是由当前Shell进程来执行脚本文件的。

shell的变量

●Shell是基于字符串的编程语言,shell的变量只能存储字符串。

●Shell的变量有两种类型,即shell环境变量和用户自定义变量。

●Shell的环境变量:作用是定制shell的运行环境,保证shell正确执行,它又分为可

写和只读两大类。

●1、可写的shell环境变量

可写的shell环境变量可以对它们进行赋值,大部分可写的shell环境变量都在登录过程中执行“/etc/profile”文件时进行初始化。该文件由系统管理员设置,用于为系统上的所有用户建立一个公共环境。

部分重要的可写环境变量

CDPATH:包含一系列目录名;如果该变量未设置,cd命令将搜索当前目录。

ENV:UNIX/ linux查找配置文件的路径

HOME:用户初次登录时的起始目录

PATH:包含了用户的搜索路径的变量,也即shell用来搜索外部命令或者程序的目录。

PS1:在命令行上出现的shell提示符。

PS2:如果shell认为一个命令尚未结束,例如当命令以作为转义字符的反斜杠终止时,则在命令的第二行显示第2个shell提示符

PWD:当前工作目录的名称

TREM:用户控制终端的类型

PPID:父进程的进程ID号

●2、只读的shell环境变量

只读的shell环境变量的变量名和值有shell自动设置。用户能使用和读取它们的值,但不能对它们进行更改,只读的shell环境变量有两种:一种是特殊的环境变量;另一种是位置参数。

特殊的环境变量

●$@所有参数字符串组成的字符串

●$0 shell程序名

●$1-$9第一至第9个命令行参数的值

●$#命令行参数的个数

●$$当前进程的进程ID(PID)

●$?最后执行的一条命令的退出状态,返回值为0则成功,非0则失败

●$!在后台运行的最后一个进程的进程ID

位置参数

●在命令行传递给shell脚本的参数。

●共有十个位置参数,依次是

●$0,$1,$2,…,$9

●必有$0;而其他位置参数依据实际需求,可有可无。

●输出位置参数

●可以用echo命令输出位置参数

[root@localhost ~]# cat var_test

echo My name is $0, I have $# parameters, they are $@

echo The first of them is \“$1\”

字符串测试

参数功能

str 如果字符串str不是空字符串,则测试条件

为真

str1 = str2 如果strl等于str 2,则测试条件为真(注

意,“=”前后须有空格)

str1 ! = str2 如果str1不等于str2,则测试条件为真

-n str 如果字符串str的长度不为0,则测试条件为

-z str 如果字符串str的长度为O,则测试条件为真例如:

●(1)判断两个变量S1与S2字符串是否相等,可以写成[“$S1” = “$S2”]或者

test “$S1” = “$S2”

●(2)在引用变量及字符串中,要求用双引号括起来,如判断变量S1是否等于字符

串“yes”可以写成:

[“$S1” = “yes”]或者test “$S1 = “yes”

幻灯片52

数值测试

参数功能

n1 –eq n2 如果整数n1等于n2(n1 = n2),则测试条件

为真

n1 –ne n2 如果整数nl不等于n2(n1 <> n2),则测试

条件为真

n1 –lt n2 如果n1小于n2(n1 < n2),则测试条件为真n1 –le n2 如果n1小于等于n2(n1 <= n2),则测试条

件为真

n1 –gt n2 如果n1大于n2(n1 > n2),则测试条件为真n1 –ge n2 如果nl大于等于n2(n1 >= n2),则测试条

件为真

幻灯片53

用逻辑操作符进行组合的测试语句

参数功能

! 逻辑非,放在任意逻辑表达式之前,原来真

的表达式变为假,原来假的变为真

-a 逻辑与,放在两个逻辑表达式之间,仅当两

个逻辑表达式都为真时,结果才为真

-o 逻辑或,放在两个逻辑表达式之间,其中只

要有一个逻辑表达式为真时,结果就为真( ) 圆括号,用于将表达式分组,优先得到结果。

括号前后应有空格并用转义符“\(”和“\)”用逻辑操作符进行组合的测试语句实例

●[ ! "$s1" -le 0 ]

●! test "$s1" -le 0

●[ -f "$s1" –a –w "$s1" ]

●test –f "$s1" -a –w "$s1"

●[ "$s1" –gt 0 –o "$s2" –lt 10 ]

●test "$s1" –gt 0 –o "$s2" –lt 10

●[ \( "$a" –gt 0 –a "$a" –lt 10 \) –a "$a" –ne 5 ]

test \( "$a" –gt 0 –a "$a" –lt 10 \) –a "$a" –ne 5

算术表达式和退出脚本程序命令

●五种基本的算术运算:+(加)、-(减)、\*(乘)、/(除)和%(取模)。shell只

提供整数的运算。格式如下:

●expr n1 运算符 n2

●例:expr 15 \* 15

●注意:在运算符的前后都留有空格,否则expr不对表达式进行计算,而直接输出它们。

●退出脚本程序命令exit

case语句

●对同一变量进行多次的测试,比elif语句更简单、简洁

●case string1 in

●str1)

● commands-list1;;

●str2)

● commands-list2;;

●...

●strn)

● commands-listn;;

●esac

例7.10用case语句来判断输入的位置参数所携带的字符串是否匹配一个文件名的字符串。#cat test7-10

case $1 in

file) echo “it is a file”;;

dir) echo “current directory is `pwd`”

ls –l;;

*) echo “it is not a filename”;;

esca

使用case语句时应注意以下几点

●(1) 每个正则表达式后面可有一条或多条命令,其最后一条命令必须以两个分号(;;)

结束。

●(2) 正则表达式中可以使用通配符。

●(3) 如果一个正则表达式是由多个模式组成,那么各模式之间应以竖线“|”隔开。表

示各模式是“或”关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。

使用case语句时应注意以下几点

●(4) 各正则表达式是唯一的,不应重复出现。

●(5) case语句以关键字case开头,以关键字esac结束。

●(6) case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行

任何命令,则退出值为零。

例7.11case语句的通配符几多个模式组合实例

#cat test 7-11

case $1 in

[dD]ate) echo “the date is `date`”;;

dir|path) echo “cuurent directory is `pwd`;;

*) echo “bad argument”;;

esac

for语句

●for命令常用于简单的、确定的循环处理

●格式:

●for variable [in argument-list]

●do

● command-list

●done

●作用:重复执行command-list中的命令,执行次数与in argument-list中的单词个

数相同。其中的[in argument-list]部分为可选项,由于它的不同又可有三种形式。[in argument-list]部分三种形式

●[argument-list]为字符串列表

●变量variable依次取字符串列表中各字符串,对每次取的值都执行命令列表,

知道所有字符串都处理完。

●例7-12将指定的人名用for循环依次输出。

●#cat test7-12

●for people in Debbie Tom John Kitty Kuhn

●do

● echo “$people”

●done

[in argument-list]部分三种形式

●[argument-list]为文件的表达式

●变量的值依次取当前目录(或指定目录)下与文件表达式相匹配的文件名,每取

值一次,就进入循环体执行命令表,直到所有匹配的文件名取完为止。

●例7-13将当前目录下的所有*.c文件用for循环依次输出。

●#cat test7-13

●for i in *.c

●do

● cat $i

●done

[in argument-list]部分三种形式

●[argument-list]为空

●[argument-list]也可以用$@来代替,即for i等同于for i in “$@”。变量

依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。例7-14编写shell脚本,第一个位置参数为指定的目录,其后指定的位置参数为第一个位置参数指定目录下的文件,显示这些文件的内容

#cat test7-14

dir=$1;shift

if [ -d $dir ]

then cd $dir

for name

do

if [ -f $name ]

then cat $name

echo “End of ${dir}/$name”

else echo “Invalid file name:${dir}/$name

fi

done

else echo “Bad of directory name:$dir”

fi

while语句

●while命令的作用的是进行有条件的循环控制

●格式为:

●while expression

●do

● command-list

●done

●作用:只要expression的值为真,则进入循环体,执行command-1ist中的命令,然

后再做条件测试,直到测试条件为假时才终止while语句的行。

例7-15编写程序,这段程序对各个给定的位置参数,首先判断其是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。每次循环处理一个位置参数$1,利用shift 命令可把后续位置参数左移。

#cat test7-15

while [ $1 ]

do

if [ -f $1 ]

then echo “display: $1 ”

cat $1

else echo “$1 is not a file name. ”

fi

shift

done

幻灯片68

例7-16利用while循环输出1-10之间的整数。

#cat test7-16

x=1

while [ $x -le 10 ]

do

echo $x

x=`expr $x + 1`

done

until语句

●格式为:

●until expression

●do

● command-list

●done

●作用:只要expression的值为假,就执行command—lists的命令。

例7-17 用until完成与例7-16相同的任务。

#cat test7-17

x=1

until [ $x –gt 10 ]

do

echo $x

x=`expr $x + 1`

done

break和continue语句

●break命令可以从循环体中退出来。格式为:

●break

●continue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。

格式为:

●continue

例7-18利用while和break完成例7-16等的任务

#cat test7-18

x=1

while true

do

echo $x

x=`expr $x + 1`

if [ “$x”–gt 10 ]

then break

fi

done

例7-19输入一组数,打印除了值为3的所有数。

#cat test7-19

for I in 1 2 3 4 5 6

do

if [ “$i”–eq 3 ]

then continue

else echo “$i”

fi

done

●1.编写一个shell脚本,将用户主目录下的所有*.txt文件用for循环复制到mysoft

子目录下并显示所复制文件的内容。

● 2.编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。

●3、编写一个shell脚本,从键盘输入两个整数,比较其大小,并将其中较大的一个输

出。

●4、设计一个模拟台式计算器,从键盘输入两个数,再输入算术运算符,求其计算结果。

要求输出结果为:第一个数运算符第二个数 = 运算结果。(运算符仅包含expr支持的+ - * / %)

GCC简介

●Linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编

译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。

gcc的执行过程

Gcc编译的全过程要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。

● gcc的命令格式:

●gcc [选项] 文件列表

文件列表参数指定了gcc的输入文件,选项用于定制gcc的行为。

幻灯片78

●gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这

里只介绍其中最基本、最常用的参数。

● -c,预处理+编译+汇编,产生目标代码,不连接。

● -o output_filename,指定输出文件的名称为output_filename,同时这个名称

不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

● -E 预处理,产生预处理过的代码,不编译。

●-S 预处理+编译,产生汇编代码,不汇编。

错误!未找到引用源。

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”

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编程实验报告

《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程序设计基础

上机实习题: 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

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来执行程序。

实验3_shell程序设计

实验三shell程序设计目的 1.理解shell操作环境 2.掌握shell程序编写方法 内容 1.练习、理解下面命令 history history 20 !! !vi alias alias ld=’ls -ld’ { date;pwd;tty;stty; } > file1 echo ”123*456+789” | bc var1=”abcd1234” echo ${var1:3:4} var2=${var1:=”abcd1200”} echo $var2 echo ”$HOME $PWD” echo ”我的主目录是$HOME” echo ”当前目录是$PWD” arr1=(long live chair mao) echo ${arr1[1]} arr2=(`date`) echo ${arr2[3]} echo ${arr1[*]} echo ${arr1[@]} echo $$ echo $? [ $? -eq 0 ] || echo ”上面命令执行失败。”

2.编写shell程序,按要求文件名保存在个人中目录下“实验3”子目录下。 1)文件名feb.sh,输出数列1 1 2 3 5 8 13 …前30项; 2)录入、阅读、运行程序dust.sh,理解程序的意义。dust.sh代码如下: #!/bin/bash If [ $# -eq 0 ] then echo ”指定一个文件名。” else gzip $1 #压缩文件 mv $1.gz $HOME/dustbin echo ”文件$1被删除!” fi exit 0 3)文件名colle.sh,收集2016 级学生实验3编写程序文件。学生用户的名称是学生学号,如2016012999,用户主目录是/home/学号(如/home/2016012999)。将学生用户主目录下“实验3”子目录中文件feb.sh(有些学生为有该文件,有些学生没有)复制用户主目录下,并改名为“学号_feb.sh”(如2016012999_feb.sh)。 3.阅读理解程序,程序文件在主机202.117.179.233,目录/var/materials下。 实验报告书写指导 1.将你对操作、显示信息的理解写在操作命令后; 2.实验报告提交到202.117.179.110; 3.编写的shell程序保存在个人目录下“实验3”子目录中。

实验一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课程打下基础。

【答案】实验三 Vi及Shell程序设计

实验三Vi及Shell程序设计 【实验目的】 1、掌握vi的操作方法。 2、掌握Shell脚本的编程方法。 【实验内容】 第一部分 vi 1、请在/tmp目录下建立一个名为vitest的目录;(请书写命令) [root@wwq-VirtualBox:~]# mkdir /tmp/vitest 2、进入vitest目录; [root@wwq-VirtualBox:~]#cd /tmp/vitest 3、将/etc/man.config复制到本目录下; [root@wwq-VirtualBox:~]#cp /etc/man.config . 注意:Ubuntu中没有man.config文件 4、使用vi开启本目录下的man.config文件; [root@wwq-VirtualBox:~]#vi man.config 5、在vi中设定行号; :set number 6、移动到第58行,向右移动40个字符,请问看到什么目录? /dir/bin/foo 7、移到第1行,并向下搜寻bzip2字符串,请问它在第几行? 第118行 8、将50到100行之间的man改为MAN,如何实现? :50,100s/man/MAN/gc 9、修改完后,想全部复原,怎么样实现? :q!或者按u撤销 10、复制65到73行这9行的内容,并粘贴到最后一行之后; 按“65G”使光标移到65行,再按“9yy”,再按“G”到最后一行,再按“P”就可以完成操作。 11、删除21到42行之间的开头为#符号的批注数据,如何实现? 按“21G”之后,再按“22dd”即可删除22行。 12、将这个文件另存为man.test.config文件; :w man.test.config 13、转到第27行,并删除15个字符,结果出现的第一个单词是什么? 删除:按“27G”,再按“15x”即可删除15个字符 出现“you”单词 14、在第一行新增一行,输入I am a student,怎样实现? 按“1G”到第一行,再按“O”新增一行并进入插入模式,输入文字后按Esc回到一般模式。 15、保存后退出。 :wq

考勤模拟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

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!

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.什么都没有被打印.

LINUX 第四章课后编程题答案

LINUX <<4.9>>编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。 #!/bin/bash dir=$1 /初始化 shift /参数向左移 while [ $1 ] /循环 do file=$1 / 初始化,赋值现在位置的参数1 cp $1 $dir /将现位置参数1中的值复制到目录中 shift /参数左移 done ls $dir 显示指定目录中的列表 运行:bash 代码名称要移动的目录要移动的文件 《4.10》编写一个shell脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中,就发一个问候给他。 #!/bin/bash

date /显示日期 if who |grep "^$1" /寻找用户 then write $1 << ! /对用户发消息 ! echo "hello !" fi 运行:bash vi编辑的文件 <<4.11>>打印给定目录的某些文件,由第一个参数指出文件所在的目录,其余参数是要打印的文件名 #!/bin/bash dir=$1 cd $ dir shift for f in $@; do cat $f done

运行:bash 程序代码名称目录名称文件名称 <<4.12>>利用for循环将当前目录下的(*.c)文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。 #!/bin/bash for file in `ls -l /root/a | grep ".*.c"` (Tab键上面的`) { mv /root/a/$file /root/b } ls -lS /root/b 运行:bash vi创建的文件

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;;

实验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];

相关文档