Shell编程-4---Linux教程课件
Linux与UNIX shell编程指南
《LINUX与UNIX SHELL编程指南》
读书笔记
二次发布版
张启峰
Email: zqf620@
一些废话
这是笔者第一本发到网络上的 Linux 读书笔记,利用今年十一长假,重
新编辑排版了一下,再次发到网上,姑且称为“二次发布版”吧!
关于《LINUX与UNIX SHELL编程指南》这本书,我看的是
的电子版,在很多网站都可以下载到。虽然看电子书很累人,但我还是建议不
想掏钱买书的朋友看看(有钱也不一定买的到,反正我逛书店时就没有看到过
有卖这本书的),它不愧为一本经典的讲解shell编程的书。
当初,写这本笔记时,花了很大的力气。参考了不少资料,在我认为书中
某些讲的不详细的地方,在笔记中也记述的很详细。读者可以发现,这本笔记
并不是简单的摘抄。
当然,记笔记的过程也是对我的一个提高,比如,awk和脚本编程中可以
遇到的getopts,这两个东东我一直就没搞清楚,记笔记的过程中我就把它们
搞清白了(我个人认为关键是要静下心来学)。希望这本笔记能对读者您有所
帮助!
在笔记中给出了很多举例,这些例子都在 Red Hat Linux 9 和 Red Flag
Advanced Server 4.1 中测试通过,大多数例子还给出了注释(使用C风格的
双斜线”//”注释符号)。
好了,不再废话了。最后,给您推荐两本书,都是美国佬写的。一本是机
械工业出版社出版的O'Reilly的《学习Bash(第二版)》,一本是人民邮电出
版社出版的Sams的《精通Shell编程(第二版)》。
张启峰(zqf620@)
2005年10月4日
第1章 文件安全与权限
1. 一个文件一经创建,就具有三种基本访问方式:
1) 读(r): 可以显示该文件的内容。
2) 写(w): 可以编辑或删除它。
3) 执行(x): 如果该文件是一个shell脚本或程序的话。
2. 按照所针对的用户,文件的权限可分为三类:
Linux shell编程学习笔记4
Linux shell编程学习笔记(四) --chinaitlab linux学习视频
2008-03-12 14:38
第六章 shell函数
1.定义函数
funcation name()
{
command1
....
}
或
函数名()
{
command1
...
}
eg.
#!/bin/bash
#hellofun
function hello()
{
echo "hello,today is `date`"
return 1
}
2.函数调用
#!/bin/bash
#hellofun
function hello()
{
echo "hello,today is `date`"
return 1
}
echo "now going to the function hello"
hello
echo "back from the function"
所以调用函数只需要在脚本中使用函数名就可以了。
3.参数传递
像函数传递参数就像在脚本中使用位置变量$1,$2...$9
4.函数文件
函数可以文件保存。在调用时使用". 函数文件名"(.+空格+函数文件名) 如:
hellofun.sh
#!/bin/bash
#hellofun
function hello()
{
echo "hello,today is `date`"
return 1
}
func.sh
#!/bin/bash
#func
. hellofun.sh
echo "now going to the function hello"
echo "Enter yourname:"
read name
hello $name
echo "back from the function"
[test@szbirdora 1]$ sh func.sh
now going to the function hello
Linux实验项目四--shell编程
实验项目四 shell编程
一、实验目的
(1)了解shell的作用和主要分类;
(2)掌握bash的建立和执行方式;
(3)掌握bash的基本语法;
(4)学会编写shell脚本。
二、实验内容
(1)shell脚本的建立和执行;
(2)历史命令和别名定义;
(3)shell变量和位置参数、环境变量;
(4)bash的特殊字符;
(5)一般控制结构;
(6)算术运算及bash函数。
三.实验软件
VMWare Workstation 5.0;
Red hat linux 9.0;
四.实验主要步骤
1、利用vi建立一个脚本文件,其中包括date,cal,pwd,ls等常用命令。然后以不同方式执行脚本。
2、运行history命令,配置历史命令环境。
3、体会bash的命令补齐功能。
4、用alias定义别名,然后执行。
5、编辑如下脚本进行执行:
6、编写一个shell脚本,求斐波那契数列的前10项及总和。
7、设计一个程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:
$cuts 11 14
tis is a test of cuts program (输入)
tst(显示结果
五.实验结果
1、利用vi建立一个脚本文件,其中包括date,cal,pwd,ls等常用命令。然后以不同方式执行脚本。
2、运行history命令,配置历史命令环境。
3、体会bash的命令补齐功能。
双击tab键,能列出所有符合条件的结果,只有唯一结果时单击可补全。
4、用alias定义别名,然后执行。
5、编辑如下脚本进行执行:
6、编写一个shell脚本,求斐波那契数列的前10项及总和。
7、设计一个程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:
Linux下的Shell编程
实验三、Linux下的Shell编程
一、实验目的
1、了解shell的概念
2、了解shell变量的种类及其使用
3、理解和掌握条件测试的原理和方法
4、掌握用VI创建shell脚本的方法
5、掌握shell脚本的执行方法
二、实验准备与要求
1、硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存;软件:Linux
RedHat9.0操作系统。
2、学时:至少2学时
三、实验内容及基本操作
1、Linux系统的Shell
使用Linux系统时,用户多数时间是通过Shell与系统进行对话的。Shell是一个接收用户输入命令并将其转换成指令的程序,它是用户与Linux系统之间的界面之一。Linux系统中可以使用的Shell包括:
bash:Bourne Again Shell。这是Linux系统上最常用的Shell,它合乎POSIX标准且相容于Bourne Shell,提供了编辑命令行的功能。
csh:C Shell。由Berkeley (伯克利大学) 开发,与Bourne Shell在交互式使用上很多是相兼容的,但在程序设计界面上却有很大的不同。它不提供编辑命令行的功能,但它有类似的功能叫命令历史记录。
ksh:Korn Shell。在UNIX系统下得到普遍使用,并最早将现代Shell技术 (包括取自C Shell的部分) 引入Bourne Shell,提供了编辑命令行功能。
sh:Bourne Shell。是原始的Shell,不提供编辑命令行功能
tcsh:C Shell的加强版,提供了编辑命令行的功能
zsh:Z Shell。最新的Shell,与Bourne Shell兼容,提供编辑命令行的功能默认shell—bash Shell
2、用man或info了解更多bash shell资料。
3、用 printenv 命令查看当前起作用的环境变量列表
$printenv
Linux实验四 shell编程(一)
一、实验目的
1、了解shell的概念
2、了解shell变量的种类及其使用
3、理解和掌握条件测试的原理和方法
4、掌握用VI创建shell脚本的方法
5、掌握shell脚本的执行方法
二、实验环境
安装了Linux系统的计算机一台
三、实验过程(实验步骤、记录、数据、分析、结果)
1.Shell变量的定义及其使用。
2.位置参数和环境变量。
3.Shell中的特殊字符。
(一)Shell变量
Shell有两种变量:内部变量、环境变量和临时变量。在Shell脚本中临时变量又分为两类:用户定义的变量和位置参数。
返回值为0代表为真,其他非0值均为假。
常用的内部变量:
# 传给shell程序位置参数的个数
?存储上一个执行命令的返回值,返0 存储shell程序的名称
* 存储shell程序的所有参数
例如:
echo "Number of parameters is:"$#
echo "Program name is:"$0
echo "Parameters as a single string is:"$*
实验四 shell编程(一)
(二) SHELL中的特殊字符
1、通配符
通常的通配符有三种:
* 星号,它匹配任意字符的0次或多次出现。但注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。
? 问号,它匹配任意一个字符。
应该注意:字符 * 和 ?在一对方括号外面是通配符,若出现在其内部,它们就失去通配符的能力了。
! 叹号,若它紧跟在一对方括号的左方括号[之后,则表示不在一对方括号中所列出的字符。
分析:字符 * 和 ?在一对方括号外面是通配符,若出现在其内部,它们就失去通配符的能力了。
分析:除了file文件,其他都列出来
2、引号
在SHELL中引号分为三种:单引号、双引号、和倒引号。
(1)双引号
由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其功能外,其余字符通常作为普通字符对待。
LINUX课程设计,shell编程
《Linux操作系统》
课程设计说明书
题 目: Shell编程—用户信息管理
专 业:
班 级:
学 号:
姓 名:
指导老师:
2012年06月08日
一.课程设计目的
《Linux操作系统》课程设计是网络工程专业的集中实践性环节之一,是学习完《linux操作系统》课程后进行的一次全面的综合练习。其目的在于加深对linux操作系统的系统管理各方面技术的掌握,使学生更好地把握linux操作系统的基础命令、shell脚本技术以及各种基础服务器的配置和基本应用。类UNIX操作系统在网络环境及手持设备环境下使用极为流行,几乎所有的网络服务器都是运行在类UNIX系统之上;基于类UNIX裁剪版本的手持设备也在市场中占有极大的比重,因此,对于网络工程专业掌握类UNIX操作系统的基本使用方法是相当重要的。而Linux就是类UNIX中最为流行的一个分支,鉴于Linux的开源和Linux开发群的活跃特性,Linux都是高等院校计算机类专业必开设的课程。而Linux操作系统课程设计能够更好的加强学生在课程学习中各种知识的综合应用能力和实践经验。
二.课程设计内容
在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能:
1) 在屏幕上显示当前所有用户的记录
2) 在屏幕上显示当前所有用户(经过格式化和排序的)的记录
3) 只在屏幕上显示用户名和用户ID
4) 只在屏幕上显示(经过格式化和排序的)用户名和用户ID
5) 查询并显示特定用户的记录
6) 往passwd文件里增加新的用户记录
7) 从passwd文件里删除某个用户记录
在目录下有四个文件分别为menu,passwd,add,delete
注:
passwd是自建数据文件,而不是/etc/passwd这个文件,切记。
menu、add和delete是shell脚本文件。
linux操作系统之Shell编程
例题:
shell1.sh 显示日期和时间。
#!/bin/bash
echo “current time is `date`” //date要加反引号 shell2.sh 显示文件名,并显示位置参数(执行时带一个参数)。(①
$0是一个特殊的变量,它的内容是当前这个shell程序的文件名;②$1是
一个位置参数,位置参数之间用空格分隔,shell取第一个位置参数替
换程序文件中的$1,第二个替换$2,依次类推。) #!/bin/bash
echo “the program name is $0” //$0是一个特殊的变数
echo “the first para is $1” //$1是一个位置参数
echo “the program exit” //执行时带一个参数 如./shell2.sh abcd shell3.sh 判断并显示位置参数
#!/bin/bash
if [ -d “$1”];then
echo “$1 is directory ,existed”
else
echo “$1 does not exist ,now create it”
mkdir $1
echo “$1 is created”
fi //执行时带一个参数
shell4.sh 问候用户
#!/bin/bash
user=`whoami`
case $user in
teacher)
echo “hello teacher”;;
root)
echo “hello root”;;
*)
echo “hello $user,welcome”
esac
1、 求1+2+3+...+100的和是?
#!/bin/bashSUM=0
I=0
while [ $I -le 100 ]
do
SUM=$((SUM+I))
I=$((I+1))
done
echo "由1+2+3+...+100的和是:$SUM"
2、(基训十一) 在根目录下有四个文件m1.txt,m2.txt,m3.txt,m4.txt,
Linux实习四 shell编程
实习四 shell编程
一、 实习目的
1. 学习shell脚本的编写格式
2. 学习编写简单的Bash脚本
二、 实习内容
1. 练习书中的有关的例题。
例题:打印给定行数的*号。
2. 完成教材P140的4.4、4.8。
4.4 将主提示符改为你的主目录名,并予以输出。
可通过修改PS1环境变量来实现,命令:
$PS1=”[\u]\$”
4.8分析下列Shell脚本的功能:
count=$# #count为位置参数的个数
cmd=echo while[ $count –gt 0 ] #当参数大于零时
do
cmd=”$cmd \$$count” #cmd=”echo $count”
count=`expr $count - 1` #将参数个数减1
done
eval $cmd #输出参数
功能:该脚本实现的将参数以倒序输出
3. 分析如下脚本功能(注释每条语句,并描述脚本功能):
usrname=$1
[ -z $usrname ]&&read -p “Please Input Username:” username
#如果输入username为空,则条件为真,则提示输入username
w -h|grep -q “^$username” || { echo $username do not login;exit
1;}
#打印所有在在线用户,检测输入用户是否在线,如在线,则进行下一条命令,如没在线输出提示用户不在线
echo -n Input Message to Send: #提示输入要发送的信息
read msg #读取发送信息 if echo $msg|write $username 2>/dev/null
#输出发送信息,并将信息发送到指定用户,且将错误信息抛出
then echo Send Message successfully!!
#如果发送成功,则输出发送信息以及发送成功提示
Linux Shell 编程
物联网学院
2015 / 2016 学年第 一 学期
实验报告
课程名称:Linux 编程基础
实验名称:Linux Shell 编程
班 级 学 号
学 生 姓 名
指 导 教 师
日期: 2015 年 11 月3日
一、实验目的
(1)熟悉Shell环境和Shell的执行
(2)熟悉Shell的基本语法和语句
(3)了解Shell程序的调试方法
二、实验环境
(1)PC 一1台
(2)安装虚拟机版的Linux 操作系统
三、实验预习
(1)熟悉Shell语法
(2)熟悉Shell控制语句
(3)熟悉Shell基本实例
(4)了解Shell的调试
四、实验内容
(1)编写Shell程序
(2)调试和执行Shell程序
五、实验步骤
编写实现如下两个题目的要求:
(1)编写一个Shell程序,从/etc/passwd 文件中读取出所有的系统用户名称和用户所属的组名称。(有多种方法,要求务必使用教材中的知识编程实现,当然也可以尝试 sed 、awk等其他方法。)
代码如下: #!/bin/bash
cat /etc/passwd | awk –F ‘:’ ‘{printf $1 “\t” $5}’
实验结果:
(2)将某目录下面所有的文件名后面加上所有者的名字,如a.txt的所有者为 owner,修改后为a[owner].txt 文件。
基本要求:
1)使用方法为usage: 程序名称 目录名称
若没有“目录名称”参数,则修改当前目录下文件名称
2)对目录中的子目录不做变化
3)给出实验结果
代码如下: #!/bin/bash if [ $# -eq 1 ]
then
cd $1
fi
for file in $(ls)
do
if [ -d ${file} ]; then
echo
else
mv ${file} ${file%.*}[$LOGNAME].${file##*.};
(完整版)Linux下Shell编程
Linux下Shell编程
本文内容
➢ Shell命令行的运行
➢ 编写、修改权限和执行shell程序的步骤
➢ 在shell程序中使用参数和变量
➢ 表达式比较、循环结构语句和条件结构语句
➢ 在shell程序中使用函数和调用其他shell程序
一、 Shell命令行书写规则
学习目标
Shell命令行的书写规则
对shell命令行基本功能的理解有助于编写更好的shell程序,在执行shell命令时多个命令可以在一个命令行上运行,但此时要使用分号(:)分隔命令,例如:
[root@localhost root]# ls a* -l;free;df
长shell命令行可以使用反斜线字符(\)在命令行上扩充,例如:
[root@localhost root]#echo “this is \
>long command”
This is long command
注意:
“>”符号是自动产生的,而不是输入的。
二、 编写/修改权限及执行shell程序的步骤
学习目标
编写shell程序
执行shell程序
Shell程序有很多类似C语言和其他程序设计语言的特征,但是又没有程序语言那样的复杂。Shell程序是指放在一个文件中的一系列Linux命令和实用程序。在执行的时候,通过Linux操作系统一个接一个地解释和执行每条命令。首先,来编写第一个shell程序,从中学习shell程序的编写、修改权限、执行过程。
(一) 编辑shell程序
编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。
[root@localhost bin]#vi date
#!/bin/sh
echo “Mr.$USER,Today is:”
echo &date “+%B%d%A”
echo “Wish you a lucky day!” 注意:
#!/bin/sh通知采用Bash解释。如果在echo语句中执行shell命令date,则需要在date命令前加符号“&”,其中%B%d%A为输入格式控制符。
