Linux_Shell编程
16.1 shell概述
16.1.1 什么是shell shell是一种命令解释程序(命令解释器),shell解 释用户输入的命令行,提交系统内核处理,并将结果 返回给用户。与Linux命令一样都是实用程序,但两者 又有区别。一旦用户注册到系统后,shell就被系统装 入内存,并一直运行到用户退出系统之止;而一般命 令仅当被调用时,才由系统装入内存执行。 shell本身也是一种可编程的程序设计语言。用 shell写的程序(shell脚本)相当于dos/windows下的批处 理文件,它可以简单到只有一条命令,也可以复杂到 包括大量循环、条件语句、数学运算、控制结构,也 可以是介于两者之间的程序。
5. 转义符(\) 使用转义符消除单个字符的特殊含义,即将紧跟在 转义符后面的单个字符按字符本身的实际含义解释。 例:转义符具有续行功能 $ cat back.sh echo ″Enter your name: \c″ read name echo Hello $name
(2) 命令行编辑程序 bash的命令行编辑是在提示符下,可对未执行 的命令字符任意地修改。 (3) 命令历史(command history) 所谓的命令历史就是把曾经输入过的命令记录 起来,方便日后的查询与使用。只要按向上键就可 以调出前一个命令,再按一次向上键就可以调出更 前一个命令,依此类推,用向下键可以回到下个命 令,所以用上、下键就可以选择以前输入过的命令。
2. 单引号 („‟) 使用单引号消除被括在单引号中的所有特殊字符的 含义,即单引号表示内容照原样不动。 例1: $echo ′type a $* please′ type a $* please 例2: 在指定的目录中,查找名字为 *.zh 或 $.sh文 件。 $cat test.sh grep ′*.zh | $.sh′ $1
பைடு நூலகம்
x?y 匹配以x开始、以y结束、中间为任何单个字 符的字符串; [!Z] 匹配不为Z的单个字符。 通配符作为文件扩展名的使用 例: [a-f]* 匹配字符a到字符f开头的文件名,如abc, d2,e3.c,f.dat; *z 匹配以字符z结尾的任何字符串,如win.z, core.zz,a-c-5z; rc?.d 匹配以rc开始、以.d结束、中间为任何单个 字符的文件名,如rc0.d,rc2.d,rcS.d; *[!o] 匹配不以o结尾的文件名。
nodehost=beijing.UUCP path=/bin:/usr/bin:/etc/bin count=10 允许多个赋值操作,按从右到左的顺序进行。 例: #A=$B B=abc C=″OK″ # echo $A $B $C abc abc OK 当引用一个未设置的变量时,其隐含值为空。 例: # echo ″$mail is path of mailbox″ is path of mailbox
16.1.4 Shell程序的创建与执行
• 用任一文本编辑器创建shell文件 (xxx) (例如: gedit xxx或vi xxx) • 将shell文件改为可执行文件 (例如:$chmod u+x xxx) • 执行shell文件 (例如:$./ xxx)
16.1.5 Shell程序示例
• • • • • • • • • • • • • • • 例一、一个简单的shell程序 #vi first.sh #!/bin/bash # a simple shell script example #a fuction Function say_hello( ) Echo “enter your name ,please.:” Read name Echo “hell $name” } Echo “program starts here…” Say_hello Echo “program ends” #chmod +x first.sh #./first.sh
$n : $1 表示第一个参数,$2 表示第二个参数 ... $#: 命令行参数的个数 $0 :当前程序的名称 $?: 前一个命令或函数的返回码,如果正常退出则返回 0,反之为非0值。 $* :以“参数1 参数2 ... ” 形式保存所有参数 $@: 以“参数1” “参数2” ... 形式保存所有参数 $$ :本程序的(进程ID号)PID $! :上一个命令的PID
16.2 shell变量
16.2.1 shell变量描述 shell实际上是基于字符串的程序设计语言,但也有变 量。shell变量能够而且只能存储正文字符串,即它 只有一种类型的变量即串变量。但从赋值的形式上 看,则可以分成四种类型的变量或变量形式。变量 的名字必须以字母或下划线开头,可以包括字母、 数字和下划线。 16.2.2 用户自定义变量 用户自定义变量语法格式:name=string,赋值号“=” 两边不允许有空白符。 例:
16.2.4 环境变量 shell执行环境由一系列环境变量组成,这些变量是由 shell维护和管理的。所有这些变量都可被用户重新 设置,变量名由大写字母或数字组成。 CDPATH 执行cd命令时使用的搜索路径; HOME 用户的home目录; PATH 寻找命令或可执行文件的搜索路径; PS1 主命令提示符,默认为“$”; PS2 从命令提示符,默认为“>”; TERM 使用的终端类型。
16.1.2 shell程序语言的特点 shell允许通过编程来完成复杂的功能处理,但 其作为语言与高级语言相比较具有不同的特点: (1) shell是解释性的,多数高级语言是编译性的; (2) shell语言与高级语言处理的对象不同; (3) shell与系统有密切的关系; (4) shell易编写、调试、灵活性较强,但速度低; (5) shell作为命令级语言,命令组合功能很强。
引用变量的值时,可以用花括号{}将变量名称括起来, 使变量名称与它的后续字符分隔开,如果紧跟在变 量名称后面的字符是字母、数字或下划线时,必须 要使用花括号。 例5: # str=′This is a string′ # echo ″${str}ent test of variables″ This is a stringent test of variables # echo ″$strent test of variables″ test of variables
如果用双引号“”将值括起来,则括起来的字符串 允许出现空格、制表符和换行符等特殊字符,而且 允许有变量替换。 例1:# MAIL=/var/mail/fk # var=″$MAIL is path of mailbox″ # echo $var /var/mail/fk is path of mailbox 例2: # str=″This is \n a book″ # echo $str This is a book
第16讲 shell编程
16.1 16.2 16.3 16.4 16.5 16.6 习题
shell概述 shell变量 shell的特殊字符 shell的控制结构 shell应用实例 小结
shell是一种命令语言,同时又是一种程序 设计语言。 shell的语言处理能力,使得用户能够方便 地定义各种变量、参数,并使用各种控制语 句编写复杂的命令程序完成多种工作。 本课介绍shell、shell程序设计语言、shell 的运行环境及shell程序的实例。
3. 双引号 (“”) 使用双引号能消除被括在双引号中的大部分特殊字 符的含义,不能消除的字符有:$、 ` 、″、 \。 例1:$echo ″ Type a \$*, please ″ Type a $*, please 例2: vdate= ″`date` is the system maintenance time ! ″ 例3: $cat share-file mkdir /tmp/fk chmod 755 /tmp/fk cp ″$@″ /tmp/fk chmod 777 /tmp/fk/*
4 反撇号(``) 当一个字符串被括在反撇号“ ` ”中时,该字符串将 作为命令被shell解释执行,即用命令的执行结果替 换这个字符串本身。要注意反撇号与单引号的区别。 例1:$ now=′date′ $ echo $now date $ now=`date` $ echo $now 1998年 10月 28日 星期三 17时 51分 56秒 CST 例2:$ count=10 $ count=`expr $count+1` $ echo $count
16.3 shell中特殊字符
在shell中所使用的许多特殊符号也可为其他目的所 使用,包括通配符、转义符、单引号和双引号。 1. 通配符 * 匹配任何字符串,包括空字符串; ? 匹配任何单个字符; [.,-,!] 按照范围、列表或不匹配等形式匹配指定 的字符; \ 转意符,使原字符失去其特殊的含义。 例: [a-d,x,y] 匹配字符a、b、c、d、x、y; z* 匹配以字符z开始的任何字符串;
• PS1中可用信息 \$ 用$作为提示符 \\ 显示\ \d 显示当前日期 \h 显示主机名 \s 显示shell名 \t 显示当前时间(24) \T 显示当前时间(12) \@ 显示当前时间(AM/PM) \u 显示用户名 \v 显示bash的版本 \W 显示当前工作目录 \w 显示当前工作路径
16.2.3 位置变量
位置变量顾名思义是与变量所在位置有关的变量, 这是一种特殊的变量。当一个shell过程被调用时, shell隐含地为它建立一系列的位置变量。这种位置 变量是系统预定义好的,可以直接引用。如命令行 的shell过程名本身被指定为位置变量$0,第一个 命令参数为$1,……,第九个命令参数为$9。 例: ls / /bin /etc /usr/bin /dev $0 $1 $2 $3 $4 $5
16.1.3 bash的特点 shell有两种主要语法类型: Bourne shell和C shell,彼此不兼容。Bourne shell家族:sh ksh bash psh zsh;C shell家族:csh tcsh。 其中bash和 zsh在不同程度上支持 csh 的语法。 这里,我们再着重介绍一下bash的特点: (1) 自动补全功能 假设要输入的命令很长,或者命令后面要给的 文件名很长。这个时候只要按一个Tab键,bash就会 在可能的命令或文件名里面找寻匹配的命令,找到 的话就会自动帮你补齐。
Linux shell编程实验作业(含答案)
Linux shell实验作业参考1.编写一个Shell脚本,实现输入一个数字,输出该数字的阶乘。
思路:使用for循环,从1到输入的数字进行累乘,最终输出结果。
#!/bin/bashecho "请输入一个数字:"read numfact=1for ((i=1;i<=$num;i++))dofact=$(($fact*$i))doneecho "阶乘为:$fact"2. 编写一个Shell脚本,实现输入一个目录,输出该目录下所有文件名和文件大小。
#!/bin/bash# 获取目录路径read -p "请输入目录路径:" dir_path# 判断目录是否存在if [ ! -d "$dir_path" ]; thenecho "目录不存在!"exit 1fi# 遍历目录下所有文件for file in "$dir_path"/*do# 判断是否是文件if [ -f "$file" ]; then# 获取文件名和大小file_name=$(basename "$file")file_size=$(du -h "$file" | awk '{print $1}')echo "$file_name : $file_size"fidone使用方法:➢将以上代码保存为一个.sh文件,例如:`list_files.sh`➢给该文件添加执行权限:`chmod +x list_files.sh`➢在终端中运行该脚本:`./list_files.sh`,然后输入目录路径即可。
3. 编写一个Shell脚本,实现输入一个字符串,输出该字符串中所有大写字母的个数。
脚本的基本思路是遍历输入的字符串,对于每个字符,判断是否为大写字母,如果是则计数器加一。
Linux操作系统(第4版)shell编程
引用变量时,需在变量名前面加“$”符号。 • 使用变量时,需要在变量名前加“$”符号,
例如echo $season。当然使用时也会遇到一些 比较特殊的情况,就是变量名包含在其他字符 串中,这时就需要用“{}”将变量名括起来。
10.1.3 管道
• 管道和输入输出重定向十分类似。管道的 作用是在一个命令的标准输出和另一个命 令的标准输入之间建立一个通道。
10.1.4 shell里的特殊字符
• 和其他编程语言一样,shell里也有特殊字 符,常见的有美元符号“$”、反斜线“\” 和引号。美元符号表示变量替换,即用其 后指定的变量的值来代替变量。反斜线“\” 为转义字符,用于告诉shell不要对其后面 的那个字符进行特殊处理,只当作普通字 符。而shell下的引号情况比较复杂,分为3 种:双引号“"”、单引号“'”和倒引号 “`”。
• conditionN为分支条件,每个分支条件后必须以两个分号“;;” 结尾。如果都无法匹配,可用“*”代替,相当于default。 10.4.2小节中的if/elif/.../else结构多重分支语句示例也可改写 成如下形式。
• #!/bin/bash • case "$#" in • 0) echo "You didn't enter any parameter" • ;; • 1) echo "You entered only one parameter" • ;; • *) echo "You entered $# parameters" • ;; • esac • 当分支条件较多时,case语句将比if的多重分支显得简洁清晰。
Linux编程 shell命令行
Linux编程shell命令行理解shell命令行的基本功能有助于编写出更好的shell脚本。
使用shell命令行可以完成多种不同的工作,如下所示:●使用带模式匹配或者表达式的程序搜索文件或者目录。
这些命令包括GNUgawk(awk的链接)和grep命令族(包括egrep和fgrep)。
●从文件或者命令中获得数据,和向文件或者命令传送数据,分别称为输入重定向和输出重定向。
●将程序的输出过滤或者传送到另一个命令(称为使用管道)。
shell的内部作业控制命令可以将命令行作为后台进程启动,挂起一个运行程序,有选择地重新激活挂起程序或者杀死运行程序,以及完成其他进程控制功能。
多个命令可以在一个命令行中运行,如图2所示:图2 运行多个命令图3 扩充长shell命令行图2显示了w、free和df命令的输出。
长shell命令行可以在shell脚本内扩充或者使用反斜杠字符(\)在命令行上扩充。
如图3所示。
该例的前3行是一个单独的命令行,该命令行包含了两个echo命令。
当使用反斜线作为续行符时,它必须是命令行或者shell脚本的最后一个字符。
1.shell模式匹配支持shell命令行允许使用通配符作为特殊结构的字符串模式。
shell模式串既可以简单也可以复杂。
下面列出了用于shell模式匹配的一些常用字符:●*——用于匹配任意字符。
例如,要查找当前目录中所有以.doc结尾的文件,可以使用如下所示的命令:]# ls *.doc●?——用于匹配一个字符。
例如,要查找当前目录中所有以.d??结尾的文件(这里的?可以是0-9、),可以使用如下所示的命令:]# ls *.d??●[xxx]或者[x-x]——用于匹配字符范围。
例如,要列出一个目录中名字包含数字的所有文件,可以使用如下所示的命令:# ls *[0-9]*\x——匹配或者解除特殊字符(例如?)的特殊含义。
例如,要创建一个名字包含?的文件,可以使用如下所示的命令:# touch aFile\?另外,需要读者注意的是,shell可能按与Linux命令不同的方式解释某些字符或者正则表达式,除非特别小心,否则混淆shell脚本中的通配符和正则表达式将会出现问题。
Linux Shell编程复习 题集附答案
Linux Shell编程复习题集附答案Linux Shell编程复习题集附答案在本文中,我们将为您提供一份包含答案的Linux Shell编程复习题集。
通过这些题目的练习,您可以加深对Linux Shell编程的理解,并巩固所学知识。
一、基础知识题1. 什么是Shell?Shell是一种解释性的编程语言,用户可以通过Shell来与操作系统进行交互和控制。
答案:Shell是一种解释器,它接收用户的命令并将其转换为操作系统能够理解和执行的形式。
2. 常见的Linux Shell有哪些?答案:常见的Linux Shell有Bash、Zsh、Csh、Ksh等。
3. 如何查看当前使用的Shell是哪种类型?答案:可以使用echo $0命令查看当前使用的Shell类型。
4. 什么是环境变量?如何查看当前的环境变量?答案:环境变量是用来存储系统运行时的配置信息的变量。
可以使用echo $变量名命令查看当前环境变量的值。
5. 如何定义一个变量并给其赋值?答案:可以使用变量名=值的形式来定义并赋值一个变量。
二、基本命令题1. 如何查看当前所在的目录?答案:可以使用pwd命令来查看当前所在的目录。
2. 如何列出当前目录下的所有文件和文件夹?答案:可以使用ls命令来列出当前目录下的所有文件和文件夹。
3. 如何切换到某个目录?答案:可以使用cd命令加上目标目录的路径来切换到某个目录。
例如:cd /path/to/directory。
4. 如何创建一个新的文件夹?答案:可以使用mkdir命令加上目录名来创建一个新的文件夹。
例如:mkdir new_folder。
5. 如何复制一个文件?答案:可以使用cp命令加上源文件和目标文件的路径来复制一个文件。
例如:cp source_file target_file。
三、条件控制题1. 编写一个Shell脚本,判断一个文件是否存在,若存在则输出文件存在,若不存在则输出文件不存在。
linuxshell编程实验总结
linuxshell编程实验总结Linux Shell编程实验总结在Linux系统中,Shell编程是一种强大的工具,可以帮助用户进行自动化任务、脚本编写和系统管理。
通过学习和实践Shell编程,我深深地体会到了其在提高工作效率和简化任务流程方面的重要性。
在这篇文章中,我将总结我在Linux Shell编程实验中的经验和心得。
一、实验概述在这次Linux Shell编程实验中,我学习并应用了Shell脚本语言,掌握了基本的语法和命令,并通过实验来加深对Shell编程的理解和掌握。
实验的内容包括变量的定义和使用、条件语句的实现、循环结构的应用等。
二、变量的定义和使用在Shell编程中,变量的定义和使用是非常重要的一部分。
通过实验,我学会了如何使用“=”符号来给变量赋值,并可以在后续的命令中使用这个变量。
在实践中,我发现给变量加上$符号可以获取变量的值,并且可以在字符串中插入变量。
这在编写脚本时非常有用,可以将一些可变的部分定义为变量,提高程序的可读性和可维护性。
三、条件语句的实现条件语句在Shell编程中起到了重要的作用,可以根据不同的条件执行不同的命令。
通过实验,我掌握了Shell中常用的条件判断语句,如if语句和case语句。
在编写条件语句时,我注意到要使用适当的比较运算符(如“-eq”表示等于、“-ne”表示不等于等),并在语句块的结尾加上“fi”或“esac”来结束条件语句的定义。
四、循环结构的应用在实践中,我发现循环结构是Shell编程中非常重要的一部分,可以重复执行特定的任务。
通过实验,我掌握了两种常见的循环结构:for循环和while循环。
在编写循环结构时,我注意到要使用适当的循环控制语句,如“break”可以用于跳出循环,“continue”可以用于跳过当前循环中的剩余命令,继续下一次循环。
五、实验心得通过这次实验,我深刻认识到了Shell编程在自动化任务和脚本编写方面的重要性。
Shell编程既可以简化日常工作中的重复性任务,又可以提高工作效率和减少出错的可能性。
linuxshell编程实验总结
Linux Shell 编程实验总结1.引言本文档总结了在学习Li nu xS he ll编程过程中的实验经验和心得体会。
通过对L in ux Sh el l编程实验的实施和总结,我们能够更好地理解S h el l脚本的运行机制,掌握Sh el l脚本的基本语法和常用命令,提高编写高效、精确的Sh e ll脚本的能力。
2.实验一:S hell 脚本基础2.1实验目的本实验旨在帮助学员熟悉Sh el l脚本的基本语法和常用命令,掌握脚本的编写与执行方法。
2.2实验内容在本实验中,我们学习了如何编写具有特定功能的Sh el l脚本,如输出H el lo Wo rl d、计算两个数之和、判断文件是否存在等。
2.3实验心得通过本实验的实施,我对Sh el l脚本的基本语法有了更深入的理解。
在编写脚本的过程中,我发现使用变量、条件判断和循环结构可以极大地提高脚本的灵活性和实用性。
同时,我也加深了对常用命令的认识和掌握,如e ch o、re ad、i f-e ls e、fo r循环等。
这些基本的知识将为后续的实验和项目实践打下坚实的基础。
3.实验二:文件和目录操作3.1实验目的本实验旨在帮助学员了解Li nu x文件系统的基本操作,掌握S he ll脚本中与文件和目录相关的命令。
3.2实验内容在本实验中,我们学习了如何创建、复制、重命名和删除文件、目录,以及如何查询文件和目录的属性信息等。
3.3实验心得通过本实验的实施,我对Li nu x文件系统有了更深入的了解。
我学会了如何使用S he ll脚本快速处理文件和目录,并且能够根据需求编写相应的脚本来操作文件。
例如,通过使用fi n d命令来查找文件,使用g r ep命令来搜索文件内容等。
这些技能在日常工作中非常有用,能够提高工作效率和准确性。
4.实验三:文本处理4.1实验目的本实验旨在帮助学员掌握Sh el l脚本中处理文本的常用命令和技巧,能够快速有效地处理常见的文本数据。
linux实验报告shell编程
linux实验报告shell编程1. 什么是Linux Shell编程?Linux Shell编程是一种在Linux操作系统上使用Shell脚本开发的编程语言。
Shell编程是通过编写一系列Shell脚本来完成特定任务或自动化操作的过程。
Shell是操作系统的一种命令行接口,用户可以通过Shell来执行各种命令和操作系统功能。
Shell脚本是一种文本文件,其中包含了一系列Shell命令,用于定义要执行的任务和操作。
2. 为什么要学习Linux Shell编程?学习Linux Shell编程有以下几个重要原因:2.1 自动化操作:Shell编程可以帮助我们自动执行各种任务和操作,提高工作效率。
通过编写脚本,可以自动化执行常见的操作,如文件处理、数据备份、软件安装等,节省大量时间和精力。
2.2 系统管理:Shell编程是系统管理的重要工具。
通过编写脚本,我们可以在Linux系统上进行系统配置、用户管理、进程管理等操作,简化管理流程并提高系统安全性。
2.3 学习编程思维:学习Shell编程可以培养编程思维和解决问题的能力。
编写脚本可以帮助我们理解问题,分析和解决问题,并培养逻辑思维和创造性思维。
3. Shell脚本的基本语法和结构3.1 Shebang:Shell脚本的第一行通常是一个Shebang(井号加叹号),用来指定要使用的Shell解释器。
3.2 注释:使用井号()来注释代码,用于解释代码的作用、用途和注记。
3.3 变量:可以使用变量来存储数据,并在脚本中引用。
变量以美元符号()开头,可以是数字、字符或字符串。
可以使用等号(=)进行赋值,如:var="Hello World"。
3.4 输入输出:使用echo命令将文本输出到终端,使用read命令读取用户输入。
3.5 条件语句:使用if-else语句判断条件并执行对应的代码块。
条件可以使用比较运算符(如大于、小于、等于)和逻辑运算符(如与、或、非)进行判断。
linux shell 编程 课标
linux shell 编程课标Linux Shell 编程课标Linux Shell 编程课标是一个定制的教学计划,旨在帮助学生掌握使用Linux操作系统中的Shell编程工具和技巧。
本文章将一步一步回答关于Linux Shell 编程课标的问题。
第一部分:简介和背景在本节中,我们将简要介绍Linux Shell编程课标的背景和目标。
我们还将回答以下问题:1. 什么是Linux Shell?- Linux Shell是用户与Linux操作系统内核之间的接口。
它是一个命令行解释器,允许用户通过键入指令和参数来与操作系统进行交互。
2. 为什么学习Linux Shell编程?- Shell编程是Linux系统管理和自动化的关键部分。
学会Shell编程能够提高工作效率,简化重复任务,加快数据处理和分析等。
3. Linux Shell编程课标的目标是什么?- 本课标旨在帮助学生掌握Shell编程的基础知识和技能。
通过学习各种命令和脚本语言,学生将能够编写和运行自己的Shell脚本以完成各种任务。
第二部分:课程内容在本节中,我们将详细介绍Linux Shell编程课标的内容。
我们还将回答以下问题:1. 基本Shell命令和使用方法是什么?- 学生将学习如何使用基本的Shell命令,如cd,ls,mkdir,rm等。
他们将了解每个命令的功能和使用方法,并有机会进行实践。
2. Shell脚本编程是什么?- 学生将学习如何编写和运行Shell脚本。
他们将掌握Shell脚本的语法,包括变量,条件语句,循环和函数等。
通过编写简单的脚本,学生将能够自动化重复任务和批量处理数据。
3. 如何处理文本文件和数据?- 学生将学习如何使用Shell命令和脚本来处理文本文件和数据。
他们将了解如何搜索,替换和提取文本文件中的特定内容。
学生还将学会使用常见的文本处理工具,如grep,sed和awk。
4. 如何管理文件和目录?- 学生将学习如何使用Shell命令和脚本来管理文件和目录。
Linux之19——Shell编程基础详解
Linux之19——Shell编程基础详解第⼀部分:Linux Shell 简介Shell 是⼀个⽤ C 语⾔编写的程序,它是⽤户使⽤ Linux 的桥梁。
Shell 既是⼀种命令语⾔,⼜是⼀种程序设计语⾔。
Shell 是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。
Ken Thompson 的 sh 是第⼀种 Unix Shell,Windows Explorer 是⼀个典型的图形界⾯ Shell。
当⼀个⽤户登陆linux 系统后,系统就会为该⽤户创建⼀个shell程序。
Shell的版本:Bourne Shell:是贝尔实验室开发的,unix普遍使⽤的shell,在编程⽅⾯⽐较优秀,但在⽤户交互⽅⾯没有其他shell优秀。
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在bourne shell基础上增强了很多特性,如命令补全,命令历史表等等Korn Shell:是对Bourne Shell 的发展,在⼤部分内容上与Bourne Shell兼容,集成了C Shell和Bourne shell优点。
C Shell:是SUN公司Shell的BSD版本,语法与c语⾔相似,⽐bourne shell 更适合编程第⼆部分 shell 程序设计基础2.1 shell输⼊输出2.1.1 echoecho命令可以显⽰⽂本⾏或变量取值,或者把字符串输⼊到⽂件中格式: echo stringecho的常⽤功能:\c 不换⾏ \f 不进纸 \t 跳格 \n 换⾏note:对于linux系统,必须使⽤-e选项来使以上转义符⽣效例:$ echo -e "hello\tboy"hello boyecho命令对特殊字符敏感,如果要输出特殊字符,需要⽤\屏蔽其特殊含义。
常⽤的特殊字符:双引号"" 反引号`` 反斜线\例:$ echo "\"\"" //想输出""""2.1.2 readread命令从键盘或者⽂件的某⼀⾏⽂本中读⼊信息,并将其赋给⼀个变量。
linux实验三Shell编程
linux实验三Shell编程实验三:Shell编程一.实验目的巩固所学的Linux下shell编程语言,熟悉Shell脚本。
二.实验内容1.建立一个test目录2.进入此test目录3.新建文件test1,运行下面shell脚本#!/bin/sha = "hello world"echo $a回答此脚本运行结果4.下面两种脚本,哪一个能够输出语句this is the 2nd①num=2echo "this is the $numnd"②num=2echo "this is the ${num}nd"5.若有如下shell脚本注意:空格很重要。
要确保方括号里的空格#!/bin/shif [ "$SHELL" = "/bin/bash" ]; thenecho "your login shell is the bash (bourne again shell)" else echo "your login shell is not bash but $SHELL"fi①请回答此脚本中提到的环境变量②请回答此脚本的功能6.若有如下shell脚本#!/bin/shn=0while read line;dolet "a+=$line"let "n+=1"done < filetest.txtecho $necho $a①请回答此脚本中是否包含循环,若有实现什么操作?②请回答此脚本的功能7.①新建文件test2,运行下面shell脚本#!/bin/bashecho "Your choice?"select var in "a" "b" "c"; dobreakdoneecho $var请回答此脚本运行结果②给出你对下面脚本的理解#!/bin/shecho "What is your favourite OS?"select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do breakdoneecho "You have selected $var"8.阅读下面脚本#!/bin/shhelp(){cat <This is a generic command line parser demo.USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1somefile2HELPexit 0}while [ -n "$1" ]; docase $1 in-h) help;shift 1;; # function help is called-f) opt_f=1;shift 1;; # variable opt_f is set-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2--) shift;break;; # end of options-*) echo "error: no such option $1. -h for help";exit 1;;*) break;;esacdoneecho "opt_f is $opt_f"echo "opt_l is $opt_l"echo "first arg is $1"echo "2nd arg is $2"注意:shift作用是移除当前参数,若shift 2则移除当前和下一个参数①此shell中case语句试图实现什么功能?②若将shell保存为cmdparser,则执行cmdparser -l hello -f -- -somefile1 somefile2会有什么结果?9.阅读下面shell脚本#!/bin/bashif [ $# -lt 3 ]; thencat<<help< p="">ren -- renames a number of files using sed regular expressionsUSAGE: ren 'regexp' 'replacement' filesEXAMPLE: rename all *.HTM files in *.html:ren 'HTM$' 'html' *.HTMHELPexit 0fiOLD="$1"NEW="$2"# The shift command removes one argument from the list of # command line arguments.shiftshift# $* contains now all the files:for file in $*; doif [ -f "$file" ]; thennewfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`if [ -f "$newfile" ]; thenecho "ERROR: $newfile exists already"elseecho "renaming $file to $newfile "mv "$file" "$newfile"fifidone注意:sed基本上可以看成一个查找替换程序,从标准输入读入文本,并将结果输出到标准输出,sed使用正则表达式进行搜索。
