当前位置:文档之家› 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变量值增加1mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50chmod 754 /home/shelldir/newdir/student$idone保存文件,退出vi,通过执行#chmod a+x firstshell修改文件权限,赋予文件可执行权限,通过#./firstshell或者#/bin/bash firstshell来执行程序,查看程序运行结果。

程序说明:1.程序必须以下面的行开始(必须方在文件的第一行):#!/bin/bash符号#!用来告诉系统它后面的参数是用来执行该文件的程序。

在这个例子中我们使用/bin/bash来执行程序。

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

要使脚本可执行,必须为脚本添加可执行权限。

#chmod a+x filename3.输入:# ./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+13.变量在其他编程语言中可以使用变量。

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

如程序中所示:i=0 //变量名=值取出变量值可以加一个美元符号($)在变量前面:$iShell脚本中除了用户自己定义的变量仅在程序内有效,还有系统定义的变量,比如环境变量。

由export关键字处理过的变量叫做环境变量。

我们不对环境变量进行讨论,环境变量至关重要,在后面章节中会详细介绍。

4..shell脚本程序中的表达式表达式是shell脚本中必不可少,如实例程序中的数学表达式let i=i+1shell程序中的数学表达式需要一些程序来完成,如let,expr等。

Shell中还有其他的表达式比如关系表达式等如两数比较的$i –lt 505.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@]#//将shell操作提示符修改为[tjqding@]##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 $1echo $2echo $3echo $4echo "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缺点:因为变量都保存在缓存中,重启系统或者终端,就会丢失。

相关主题