1.shell概述
Unix系统中通常提供三种不同的shell,即Bourne shell(sh)、C-shell(csh)、和Korn shell(ksh)。在Linux系统中还包含了Bash,它是由sh发展而来。稍有不同。还包含csh、ksh的特色,但大多数sh脚本可以不加修改的在Bash下运行。
2.shell脚本执行
执行shell脚本的方式基本上有三种:
1)输入定向到shell
这种方式是用输入重定向方式让shell从给定文件中读入命令行并进行相应处理。其一般形式是:
$sh < 脚本名
例如:$sh < ex1
shell从文件ex1中读取命令行,并执行他们,当shell到达文件末尾时,就终止执行并把控制返回到shell命令状态。
2)以脚本名作为shell参数
其一般形式是:$sh 脚本名 [参数]
这种方式好处是能讲参数值传递给程序中的命令,从而使一个shell脚本可以处理多种情况。
3)将shell脚本改为有执行权限
由正文编辑器建立的shell脚本通常对用户是没有设定执行权限的。需要利用命令chmod将它改为有执行权限。例如:chmod a +x ex2 :把ex2脚本改成对所有用户都有执行权限。
2.shell变量
shell变量没有众多存储类型的限制,也不需要预定义、然后才能赋值。
shell有两种变量:环境变量和临时变量。环境变量使永久性变量,其值不会随shell脚本执行结束而消失。临时变量使在shell脚本内部定义的,使用范围仅限于定义它的程序。shell脚本临时变量又分为两类:用户定义的变量和位置参数。
1)用户定义的变量
变量名是以字母或下划线打头的字母数字和下划线符序列;并且大小写字母意义不同。长度不受限制定义变量的一般形式:变量名=字符串
注意在赋值语句中赋值号两边没有空格,否则会有错误
变量的值可以改变,只须利用赋值语句重新赋值即可。
在程序中使用变量的值时,要在变量名前加上一个符号“$”。
一个未明确赋过值的变量也仅含一个空字符串。
如果在赋给变量的值中含有空格、制表符或换行符,那么就应该用双引号
在一个赋值语句中可以出现多个赋值,变量赋值可以迭代进行。但必须注意的是,各赋值动作是从右向左实现的。A=$B B=$C C=good
变量值可以作为某个长字符串的一部分,如果它在长字符串的末尾,直接引用就可以:
s=ing
echo read$s and writ$s
如果变量在字符串的开头或者中间,需用{}区分:
dir=/usr/meng
cat ${dir}qc/ml.c
2)位置参数
由出现在命令行上的位置确定的参数称作位置参数,在sh中共有十个位置参数,其对应的名称依次是$0,$1,$2,....$9.其中$0始终表示命令名或shell脚本名。对于一个命令行,必然有命令名,也就必然有$0.
3)移动位置参数
shell中规定,位置参数不能超过9个,如果超过9个,需要使用shift命令移动位置参数。每执行一次shift命令,就把位置参数左移一次。但$0的值不会改变。
shift命令可以携带一个整数作为参数。表示左移位数,默认为1
4)预先定义的特殊变量
只能由shell根据实际情况赋值,不能通过用户重新赋值
(1)$#:记录传递给shell的参数个数,不包含脚本名本身
(2)$?:包含最后一条命令执行后的返回值,正确为0,否则非0
(3)$$:当前进程的进程号
(4)$!:在后台运行的最后一个进程的进程号
(5)$-:由当前shell设置的执行标志名组成的字符串,也就是命令的参数
(6)$*:表示命令行中实际给出的所有位置参数的字符串
(7)$@:与$*基本相同,但"$@"的值和"$*"不同。例如若$*表示位置参数字符串f1 f2 f3,那么"$*"表示"f1 f2 f3",而"$@"表示"f1""f2""f3"
5)环境变量
所有的环境变量都可以由用户自己重新定义
(1)HOME:用户主目录名
(2)IFS:定界符,内部字段分隔符。默认空白符
(3)MAIL:用户存放信件的文件路径名。必须由用户自己设置。
(4)PATH:指定shell在查找命令时所需要的检索路径。由冒号隔开。
(5)PS1:主提示符,默认为$,超级用户默认为#
(6)PS2:次提示符,默认为>(大于号+一个空格)
(7)SHELL:表示要查找当前所用shell的路径,默认值为/bin/sh
(8)TERM:终端类型
(9)HZ:每秒时钟的中断次数,值取决于系统的硬件,并且在配置在文件/etc/initscript
(10)TZ:时区
(11)LOGNAME:用户注册名
(12)MAILCHECK:确定多长时间(以秒为单位)shell检查一次由变量MAIL或者MAILPATH指定的文件中是否有邮件到达。默认是600秒。如果把它设置为0,则在每次出现系统提示符之前shell都检查一次是否有邮件到达。
(13)MAILPATH:表示各个邮箱的路径,它是由冒号隔开的一系列邮件文件的路径名,相当于建立了多个邮箱。如果设置了这个变量,那么当邮件到达该路径名中所包内含的任何一个文件时,shell都将通知用户。
分享到:
相关推荐
【Shell程序设计1】章节主要涉及的是Shell编程的基础知识,包括Shell的作用、基本功能、分类以及执行流程。Shell是用户与操作系统交互的重要接口,它是一个命令解释器,负责解析用户的输入,执行相应的命令,并处理I...
实验3-Shell程序设计1是Linux操作系统课程的一部分,旨在让学生熟悉Shell编程中的基本概念和操作。这个实验主要涉及三个核心知识点:变量的定义与赋值、条件测试语句的使用以及选择和循环程序设计。 首先,变量在...
Unix Shell程序设计主要关注的是如何使用Bourne Shell(sh)进行高级程序设计。Shell作为Unix系统中的一个重要组成部分,不仅充当命令解释程序的角色,解析并执行用户输入的命令,还能作为一个高级程序设计语言,...
在这个“linux shell程序设计实验1”中,我们将探讨如何利用基本的`case`和`if`语句来编写简单的Shell程序。 一、Shell程序基础 在Linux环境中,Shell是一个命令解释器,它接收用户输入的命令并执行。Bash是最常见...
由于提供的内容中仅包含标题、描述、标签和下载链接的重复信息,并没有具体到Linux和UNIX Shell程序设计的技术细节,因此无法直接从这部分内容中提取出符合要求的知识点。为了满足您的要求,我将基于标题和标签中...
【Linux Shell程序设计】 在Linux世界中,Shell扮演着至关重要的角色。它是用户与操作系统内核之间的一个交互接口,使得用户能够通过命令行界面执行各种操作。Shell不仅仅是一个命令解释器,它还是一个功能强大的...
本书《UNIX和shell程序设计权威教程》深入浅出地介绍了这两个主题,为读者提供了全面而详细的学习资源。 UNIX系统是一种多用户、多任务的操作系统,它的设计哲学强调简洁和模块化,使得它成为开发高效软件的平台。...
《UNIX和Shell程序设计权威教程》是一本深入探讨UNIX操作系统及其Shell编程的宝贵资源。这本书旨在帮助读者理解和掌握UNIX系统的基础以及如何利用Shell脚本来自动化日常任务,提升工作效率。UNIX是一种强大的多用户...
在IT领域,Shell程序设计是Linux/Unix操作系统中不可或缺的一部分。Shell是一种命令行解释器,它为用户提供了与操作系统交互的界面,同时也允许用户编写脚本进行自动化任务处理。本资料包“shell程序设计范例”显然...
linux程序设计shell程序设计case语句,书上的例程,大家可以下来学习
- Shell程序主要由命令、变量、控制结构(如if-else、for循环)和函数组成。 - 在实验中,学生需要编写一个名为`mycal`的Shell脚本,模拟Linux中的`cal`命令。这涉及到对命令行参数的处理,以及通过内置命令或外部...
本次实验旨在使学习者掌握在Unix系统下的基本操作及Shell程序设计方法。通过实际编程任务加深对Shell脚本的理解,具体目标包括: 1. **熟悉Unix环境下的基本操作**:这包括文件管理、目录导航、文件权限设置等常用...
题目名称 linux shell程序设计实验2 题目关键字 linux shell程序设计实验2 题目录入时间 2013-5-6 10:26:43 题目内容 按要求完成课本实验7。 题目创建人 邝颖杰 题目注释 把3个程序文件打包提交即可。
本书《Unix和Shell程序设计权威教程》深入浅出地介绍了这两个主题,为学习者提供了丰富的知识资源。 Unix操作系统是最早由Ken Thompson、Dennis Ritchie等人在贝尔实验室开发的一种多用户、多任务的操作系统。它以...
本教程将深入探讨如何进行基于Linux的简单Shell程序设计,让我们一起探索这个主题。 一、Shell脚本基础 1. 文件开头:在编写Shell脚本时,我们通常会在文件开头添加一行`#!/bin/bash`,告诉系统使用Bash shell来...
操作系统-shell程序设计.ppt 供初学者使用 shell是一种命令解释程序,shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户。一旦用户注册到系统后,shell就被系统装入内存,并一直运行到用户退出...
【Linux Shell程序设计 Ubuntu 实验二】实验主要涵盖了Linux操作系统中的Shell编程基础,适用于Ubuntu环境。实验目的是让学生掌握Bash Shell的创建与执行方法,理解基本语法,并学会编写Shell脚本。实验报告要求遵循...
1. 编写一个Shell程序findit,该程序搜索参数1指定的目录树,查找所有的以.c和.h结尾的文件,如文件行中含有参数指定的字符串,显示该行和相应的文件名。如目录参数1缺省,则从当前目录中搜索。如:findit /home/...