Linux Bash Shell入门教程
在Linux上使用Shell脚本实现网络配置

在Linux上使用Shell脚本实现网络配置在Linux操作系统中,Shell脚本是一种强大的工具,可以用于自动化操作和配置。
本文将介绍如何使用Shell脚本来实现网络配置。
一、准备工作要使用Shell脚本实现网络配置,首先需要了解一些基本的网络配置知识。
例如,IP地址、子网掩码、网关、DNS等。
在Linux系统中,这些信息可以通过ifconfig和route等命令来查看和配置。
二、创建Shell脚本首先,打开一个文本编辑器,例如vi或nano,创建一个空白文件。
然后,使用以下命令开头指示脚本使用Bash作为解释器:```bash#!/bin/bash```接下来,我们可以在脚本中添加一些注释,例如脚本的用途和作者等信息:```bash# 网络配置脚本# 作者:Your Name```三、获取用户输入接下来,我们可以使用read命令来获取用户输入的网络配置信息。
例如,用户需要输入IP地址、子网掩码、网关和DNS服务器的信息。
我们可以使用以下命令获取这些信息:```bashread -p "请输入IP地址:" ipread -p "请输入子网掩码:" subnetread -p "请输入网关地址:" gatewayread -p "请输入DNS服务器地址:" dns```四、配置网络有了用户输入的网络配置信息,我们可以使用ifconfig和route命令来配置网络。
以下是一个简单的例子,用于配置有线网络:```bashifconfig eth0 $ip netmask $subnetroute add default gw $gatewayecho "nameserver $dns" >> /etc/resolv.conf```上述命令将配置eth0网卡的IP地址和子网掩码,并添加默认的网关和DNS服务器。
兄弟连Linux教程 李明Linux视频教程课件10.3.1 Shell基础-Bash基本功能-历史命令与补全

10.3.1 历史命令与命令补全 10.3.2 命令别名与常用快捷键 10.3.3 输入输出重定向 10.3.4 多命令顺序执行与管道符 10.3.5 通配符与其他特殊符号
1、历史命令
[root@localhost ~]# history [选项] [历史命令保存文件]
选项: -c: -w:
清空历史命令 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认会保存1000条,可以在环境 变量配置文件/etc/profile中进行修改
历史命令的调用
使用上、下箭头调用以前的历史命令 使用“!n”重复执行第n条历史命令 使用“!!”重复执行上一条命令 使用“!字串”重复执行最后一条以该字 串开头的命令
2、命令与文件补全
在Bash中,命令与文件补全是非常方便与 常用的功能,我们只要在输入命令或文件 时,按“Tab”键就会自动进行补全
第十讲 Shell基础
主讲人:沈超(/lampsc) 交流论坛:
课程Байду номын сангаас纲
10.1 Shell概述 10.2 Shell脚本的执行方式 10.3 Bash的基本功能 10.4 Bash的变量 10.5 Bash的运算符 10.6 环境变量配置文件
Linux之BASH和SHELL学习总结

Bourne Again SHell (简称 bash)功能:1、命令编修能力 .bash_history文件2、命令与档案补全能力 Tab键[Tab] 接在一串指令的第一个字的后面,则为命令补全;[Tab] 接在一串指令的第二个字以后时,则为『档案补齐』!3、命令别名设定,指令: alias ---alias lm='ls -al',在.bash_profile文件里4、工作控制、前景背景控制: (job control, foreground, background)-----------------------???????????不懂5、程序化脚本: (shell scripts)6、通配符(Wildcard)bash内建命令 type type [-tpa] name,产看命令是否是bash内建命令,还是外部命令。
命令多行输入反斜杠'\' 然后紧接回车。
变量取用 echo $variable变量设定规则1、等号连接,等号两边没有空格;2、变量名只能是字母和数字,变量名开头不能为数字;3、发量内容若有空格符可使用双引号『"』或单引号『'』将发量内容结合起来,但双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:『var="lang is $LANG"』则『echo $var』可得『lang is en_US』单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』;4.可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;5、在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『`指令`』或『$(指令)』。
特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号!例如想要取得核心版本的设定:『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』;6、若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:『PATH="$PATH":/home/bin』7、若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:『export PATH』8、通常大写字符为系统默认变量,自行讴定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;9、取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的设定:『unset myname』获取版本信息 uname -r查看环境变量 env查看当前shell环境下所有环境变量,set 查看所有变量(包括环境变量和自定义变量),两者区别为该变量是否可以被子程序所继续引用。
Shell脚本实现Linux系统的软件安装

Shell脚本实现Linux系统的软件安装在Linux系统中,软件安装是日常工作中的一个重要环节。
为了提高工作效率,自动化安装和配置软件是一个非常有用的技巧。
Shell脚本是一种运行在终端上的脚本语言,可以用来编写一系列的命令,从而实现自动化的任务。
本文将介绍如何使用Shell脚本来实现Linux系统的软件安装。
下面我们将分为三个步骤来进行讲解:准备工作、编写脚本、执行脚本。
一、准备工作在开始编写脚本之前,我们需要先确保系统已经安装了Shell解释器。
Linux系统通常都会预装Bash,因此我们可以通过运行以下命令来检查Shell版本:```$ echo $SHELL```如果返回结果为`/bin/bash`,则说明系统已经安装了Bash。
如果返回结果为空或者不是`/bin/bash`,则需要先安装Bash。
另外,我们还需要确定要安装的软件的来源。
在Ubuntu等Debian系的发行版中,可以使用apt-get或者apt命令来获取软件包。
而在CentOS等Red Hat系的发行版中,则可以使用yum命令来获取软件包。
在本文中,我们以apt-get为例进行演示。
二、编写脚本下面是一个简单的Shell脚本示例,用于安装指定的软件包:```bash#!/bin/bash# 软件包名package="example"# 安装软件包sudo apt-get install $package -y```在上面的脚本中,我们首先通过shebang`#!/bin/bash`指定了使用Bash作为解释器。
然后,定义一个名为`package`的变量,用于指定要安装的软件包的名称。
最后,使用apt-get命令来安装指定的软件包。
在实际使用时,可以根据需要修改`package`变量的值,来安装不同的软件包。
三、执行脚本在编写完脚本后,我们需要将其保存为一个可执行文件,并通过终端来执行。
首先,我们需要将脚本保存为一个独立的文件,例如`install.sh`。
Linux中执行shell脚本命令的4种方法总结

Linux中执⾏shell脚本命令的4种⽅法总结bash shell 脚本的⽅法有多种,现在作个⼩结。
假设我们编写好的shell脚本的⽂件名为hello.sh,⽂件位置在/data/shell⽬录中并已有执⾏权限。
⽅法⼀:切换到shell脚本所在的⽬录(此时,称为⼯作⽬录)执⾏shell脚本:复制代码代码如下:cd /data/shell./hello.sh./的意思是说在当前的⼯作⽬录下执⾏hello.sh。
如果不加上./,bash可能会响应找到不到hello.sh的错误信息。
因为⽬前的⼯作⽬录(/data/shell)可能不在执⾏程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。
查看PATH的内容可⽤ echo $PASH 命令。
现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执⾏。
⽅法⼆:以绝对路径的⽅式去执⾏bash shell脚本:复制代码代码如下:/data/shell/hello.sh⽅法三:直接使⽤bash 或sh 来执⾏bash shell脚本:复制代码代码如下:cd /data/shellbash hello.sh或复制代码代码如下:cd /data/shellsh hello.sh注意,若是以⽅法三的⽅式来执⾏,那么,可以不必事先设定shell的执⾏权限,甚⾄都不⽤写shell⽂件中的第⼀⾏(指定bash路径)。
因为⽅法三是将hello.sh作为参数传给sh(bash)命令来执⾏的。
这时不是hello.sh⾃⼰来执⾏,⽽是被⼈家调⽤执⾏,所以不要执⾏权限。
那么不⽤指定bash路径⾃然也好理解了啊,呵呵……。
⽅法四:在当前的shell环境中执⾏bash shell脚本:复制代码代码如下:cd /data/shell. hello.sh或复制代码代码如下:cd /data/shellsource hello.sh前三种⽅法执⾏shell脚本时都是在当前shell(称为⽗shell)开启⼀个⼦shell环境,此shell脚本就在这个⼦shell环境中执⾏。
Shell脚本实现Linux系统用户权限管理

Shell脚本实现Linux系统用户权限管理在Linux操作系统中,用户权限管理是一个重要的方面,它可以确保系统的安全性并控制不同用户对系统资源的访问权限。
为了简化和自动化用户权限管理的过程,可以使用Shell脚本来实现。
本文将介绍如何使用Shell脚本来实现Linux系统用户权限管理。
一、用户与权限在Linux系统中,每个用户都有一个唯一的用户名,以及与其关联的用户组。
每个文件和目录也有所属用户和用户组,同时针对每个文件和目录,都可以设置特定的权限,包括读取、写入和执行权限。
二、Shell脚本基础Shell脚本是一种用来自动化执行一系列命令的脚本语言。
在Linux 系统中,常用的Shell脚本语言有Bash、Sh、Csh等。
下面是一个简单的Shell脚本示例,用来创建用户并设置权限:```bash#!/bin/bash# 创建新用户echo "请输入新用户的用户名:"read usernameuseradd $username# 设置用户密码echo "请输入新用户的密码:"read -s passwordecho $password | passwd --stdin $username# 设置用户组echo "请输入新用户所属的用户组:"read groupnamegroupadd $groupnameusermod -g $groupname $username# 设置用户权限echo "请输入新用户的访问权限(r/w/x):"read permissionchmod $permission /home/$username```以上示例中,使用了一些常见的Shell脚本语法,如读取输入、调用命令和变量赋值等。
你可以根据实际需求进行修改和扩展。
三、用户权限管理脚本下面是一个更完整的Shell脚本示例,用于实现用户权限管理:```bash#!/bin/bash# 显示已有用户和用户组echo "已有用户列表:"awk -F: '{print $1}' /etc/passwdecho "已有用户组列表:"awk -F: '{print $1}' /etc/group# 创建新用户echo "请输入新用户的用户名:"read usernameuseradd $username# 设置用户密码echo "请输入新用户的密码:"read -s passwordecho $password | passwd --stdin $username # 设置用户组echo "请输入新用户所属的用户组:" read groupnamegroupadd $groupnameusermod -g $groupname $username# 设置用户权限echo "请输入新用户的访问权限(r/w/x):"read permissionchmod $permission /home/$username# 显示用户信息echo "新用户信息:"grep -E "^$username:" /etc/passwd```以上示例中,首先通过awk命令来显示已有的用户和用户组列表。
学习使用Shell脚本编程进行自动化任务和系统管理
学习使用Shell脚本编程进行自动化任务和系统管理Shell脚本是一种能够自动执行一系列命令的脚本语言,在Linux和UNIX系统中被广泛使用。
通过编写Shell脚本,可以实现自动化任务和系统管理,提高工作效率和减少人力成本。
本文将按照以下几个章节进行讲解。
第一章:Shell脚本的基础知识Shell脚本是由一系列Shell命令组成的文本文件,可以通过解释器来执行。
常见的解释器有bash、csh、ksh等。
在编写Shell脚本之前,我们需要了解一些基础知识,比如如何声明变量、如何进行条件判断和循环等。
只有掌握了这些基础知识,才能更好地进行Shell脚本编程。
第二章:Shell脚本的文件操作在日常工作中,我们经常需要进行文件的复制、移动、删除等操作。
通过Shell脚本,我们可以完成这些繁琐的文件操作。
在本章中,将介绍如何使用Shell脚本进行文件的创建、复制、重命名等操作。
同时,还将介绍如何使用正则表达式来匹配文件名,实现批量操作。
第三章:Shell脚本的系统管理Shell脚本不仅可以用来操作文件,还可以用来进行系统管理。
比如,我们可以通过Shell脚本来创建用户、设置权限、安装软件等。
本章将详细介绍如何使用Shell脚本来进行系统管理,包括如何添加新用户、如何创建和管理进程等。
第四章:Shell脚本的网络管理随着互联网的快速发展,网络管理变得越来越重要。
通过Shell 脚本,我们可以实现对网络的监控和管理。
本章将介绍如何使用Shell脚本来进行IP地址管理、路由管理、网络流量监控等操作。
同时,还将介绍如何通过Shell脚本实现远程登录和文件传输。
第五章:Shell脚本的定时任务定时任务是指在特定的时间或条件下自动执行某个任务。
通过Shell脚本,我们可以实现定时任务的自动化。
本章将介绍如何使用Shell脚本来实现定时任务,包括如何设置定时任务的时间、如何执行定时任务的命令等。
第六章:Shell脚本的错误处理和日志记录在编写Shell脚本时,我们经常会遇到一些错误。
Linux_基础教程--Shell脚本编程
学习各种管理和监视命令的使用
学习各种文本文件工具的使用
2014年12月24日
变量和表达式
2014年12月24日
18
Shell 变量操作
变量替换扩展
输入
变量测试 变量的字符串操作 变量的间接引用 $[expression] $((expression)) expr let declare -i
Shell 脚本的执行
PATH 环境变量的默认值不包含当前目录, 若脚本文件在当前目录,应使用 ./script-file
PATH 环境变量的默认值包含 ~/bin 目录, 用户可以将自己的脚本文件存放在 ~/bin 目录, 之后即可直接调用脚本文件名执行脚本了
2014年12月24日
7
Shell 脚本的编码规范
${var/%old/new}
用new替换${var}中结尾部分与old匹配的部分
注: (1)old 中可以使用 通配符。 (2)var 可以是 @ 或 *,表示对每个位置参数进行替换
sh –n 脚本名
对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。
2014年12月24日
12
脚本调试举例 1
对脚本进行语法检查
$ bash -n greetings.sh
显示脚本中每个原始命令行及其执行结果
$ bash -v greetings.sh
2014年12月24日 22
字符串变量替换扩展举例1
str='I love linux. I love UNIX too.‟
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命令从键盘或者⽂件的某⼀⾏⽂本中读⼊信息,并将其赋给⼀个变量。
shell脚本基础(又长又详细)
shell脚本基础(⼜长⼜详细)第⼗⼀章 BASH脚本(⼀)常见的Shell变量的类型包括环境变量、预定义变量、位置变量、⽤户⾃定义变量。
本节将分别学习这四种Shell变量的使⽤。
11. 1、 Shell的环境变量通过set命令可以查看系统中所有Shell变量(包括环境变量和⽤户⾃定义变量),由于内容输出较多,建议使⽤less命令分页查看。
常⽤环境变量:PATH 决定了shell将到哪些⽬录中寻找命令或程序HOME 当前⽤户主⽬录HISTSIZE 历史记录数LOGNAME 当前⽤户的登录名USER 当前⽤户名UID 当前⽤名的UIDHOSTNAME 指主机的名称SHELL 前⽤户Shell类型LANGUGE 语⾔相关的环境变量,多语⾔可以修改此环境变量MAIL 当前⽤户的邮件存放⽬录PS1 基本提⽰符,对于root⽤户是#,对于普通⽤户是$PS2 附属提⽰符,默认是“>”例:以分号分隔,显⽰当前的⽤户的⽤户名、宿主⽬录、登录Shell。
例:查看当前命令的搜索路径,并将/opt/bin⽬录添加到现有搜索路径中去,从⽽可以直接执⾏此⽬录中的命令。
环境变量的配置⽂件⽤户可在当前的Shell环境中直接为环境变量赋值,但需要长期变更所使⽤的某个环境变量时,可以修改配置⽂件。
在Linux系统中,⽤户环境变量的设置⼯作习惯上在 /etc/profile ⽂件及宿主⽬录中 .bash_profile⽂件中进⾏,前者称为全局配置⽂件(对所有⽤户起作⽤),后者称为⽤户配置⽂件(允许覆盖全局配置)。
例:在当前⽤户环境中,将⽤于限制历史命令的环境变量HISTSIZE的值改为100。
例:编辑“~/.bash_profile”⽂件,修改PATH的设置,以便⽤户在下次登录后能够使⽤服务/opt/bin ⽬录作为默认的搜索路径。
# vi /root/.bash_profielPATH=$PATH:$HOME/bin:/opt/binExport PATH11.2 Shell位置变量为了在使⽤Linux程序时,⽅便通过命令⾏给程序提供操作参数,Bash引⼊了位置变量的概念。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BASH 的基本语法∙最简单的例子—— Hello World!∙关于输入、输出和错误输出∙BASH 中对变量的规定(与C 语言的异同)∙BASH 中的基本流程控制语法∙函数的使用2.1 最简单的例子—— Hello World!几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。
用vi 编辑器编辑一个hello 文件如下:#!/bin/bash# This is a very simple exampleecho Hello World这样最简单的一个BASH 程序就编写完了。
这里有几个问题需要说明一下:一,第一行的#! 是什么意思二,第一行的/bin/bash 又是什么意思三,第二行是注释吗四,echo 语句五,如何执行该程序#! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。
Linux 系统根据"#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过"man magic"命令及/usr/share/magic 文件来了解这方面的更多内容。
在BASH 中第一行的"#!" 及后面的"/bin/bash" 就表明该文件是一个BASH 程序,需要由/bin 目录下的bash 程序来解释执行。
BASH 这个程序一般是存放在/bin 目录下,如果你的Linux 系统比较特别,bash 也有可能被存放在/sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或/usr/local/sbin 这样的目录下;如果还找不到,你可以用"locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个BASH 软件包了。
第二行的"# This is a ..." 就是BASH 程序的注释,在BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。
的三行的echo 语句的功能是把echo 后面的字符串输出到标准输出中去。
由于echo 后跟的是"Hello World" 这个字符串,因此"Hello World"这个字串就被显示在控制台终端的屏幕上了。
需要注意的是BASH 中的绝大多数语句结尾处都没有分号。
如何执行该程序呢?有两种方法:一种是显式制定BASH 去执行:$ bash hello 或$ sh hello (这里sh 是指向bash 的一个链接,“lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh -> bash”)或者可以先将hello 文件改为可以执行的文件,然后直接运行它,此时由于hello 文件第一行的"#! /bin/bash" 的作用,系统会自动用/bin/bash 程序去解释执行hello 文件的:$ chmod u+x hello$ ./hello此处没有直接“$ hello”是因为当前目录不是当前用户可执行文件的默认目录,而将当前目录“.”设为默认目录是一个不安全的设置。
需要注意的是,BASH 程序被执行后,实际上Linux 系统是另外开设了一个进程来运行的。
2.2 关于输入、输出和错误输出在字符终端环境中,标准输入/标准输出的概念很好理解。
输入即指对一个应用程序或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息;与Windows 系统下不同的是,Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出于标准输出分开可以让一些高级的错误信息不干扰正常的输出信息,从而方便一般用户的使用。
在Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的std 表示standard)。
在BASH 中使用这些概念时一般将标准输出表示为1,将标准错误输出表示为2。
下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。
输入、输出及标准错误输出主要用于I/O 的重定向,就是说需要改变他们的默认设置。
先看这个例子:$ ls > ls_result$ ls -l >> ls_result上面这两个命令分别将ls 命令的结果输出重定向到ls_result 文件中和追加到ls_result文件中,而不是输出到屏幕上。
">"就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个">" 符号,即">>" 则表示不清除原来的而追加输出。
下面再来看一个稍微复杂的例子:$ find /home -name lost* 2> err_result这个命令在">" 符号之前多了一个"2","2>" 表示将标准错误输出重定向。
由于/home 目录下有些目录由于权限限制不能访问,因此会产生一些标准错误输出被存放在err_result 文件中。
大家可以设想一下 find /home -name lost* 2>>err_result 命令会产生什么结果?如果直接执行 find /home -name lost* > all_result ,其结果是只有标准输出被存入all_result 文件中,要想让标准错误输出和标准输入一样都被存入到文件中,那该怎么办呢?看下面这个例子:$ find /home -name lost* > all_result 2>& 1上面这个例子中将首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到all_result 这个文件中。
这样我们就可以将所有的输出都存储到文件中了。
为实现上述功能,还有一种简便的写法如下:$ find /home -name lost* >& all_result如果那些出错信息并不重要,下面这个命令可以让你避开众多无用出错信息的干扰:$ find /home -name lost* 2> /dev/null同学们回去后还可以再试验一下如下几种重定向方式,看看会出什么结果,为什么?$ find /home -name lost* > all_result 1>& 2$ find /home -name lost* 2> all_result 1>& 2$ find /home -name lost* 2>& 1 > all_result另外一个非常有用的重定向操作符是 "-",请看下面这个例子:$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)该命令表示把/source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到/dest/directory 目录下去,这个命令在/source/directory 和/dest/directory 不处在同一个文件系统下时将显示出特别的优势。
下面还几种不常见的用法:n<&- 表示将n 号输入关闭<&- 表示关闭标准输入(键盘)n>&- 表示将n 号输出关闭>&- 表示将标准输出关闭2.3 BASH 中对变量的规定(与C 语言的异同)好了下面我们进入正题,先看看BASH 中的变量是如何定义和使用的。
对于熟悉C 语言的程序员,我们将解释BASH 中的定义和用法与C 语言中有何不同。
2.3.1. BASH 中的变量介绍我们先来从整体上把握一下BASH 中变量的用法,然后再去分析BASH 中变量使用与C 语言中的不同。
BASH 中的变量都是不能含有保留字,不能含有"-" 等保留字符,也不能含有空格。
2.3.1.1 简单变量在BASH 中变量定义是不需要的,没有"int i" 这样的定义过程。
如果想用一个变量,只要他没有在前面被定义过,就直接可以用,当然你使用该变量的第一条语句应该是对他赋初值了,如果你不赋初值也没关系,只不过该变量是空(注意:是NULL,不是0 )。
不给变量赋初值虽然语法上不反对,但不是一个好的编程习惯。
好了我们看看下面的例子:首先用vi 编辑下面这个文件hello2:file1 -ot文件 file1 比 file2 更老file2注意:上表中的file 及file1、file2 都是指某个文件或目录的路径。
2.3.1.1. 关于局部变量在BASH 程序中如果一个变量被使用了,那么直到该程序的结尾,该变量都一直有效。
为了使得某个变量存在于一个局部程序块中,就引入了局部变量的概念。
BASH 中,在变量首次被赋初值时加上local 关键字就可以声明一个局部变量,如下面这个例子:#!/bin/bashHELLO=Hellofunction hello {local HELLO=Worldecho $HELLO}echo $HELLOhelloecho $HELLO该程序的执行结果是:HelloWorldHello这个执行结果表明全局变量$HELLO 的值在执行函数hello 时并没有被改变。
也就是说局部变量 $HELLO 的影响只存在于函数那个程序块中。
2.3.2. BASH 中的变量与C 语言中变量的区别这里我们为原来不熟悉BASH 编程,但是非常熟悉C 语言的程序员总结一下在BASH 环境中使用变量需要注意的问题。
1,BASH 中的变量在引用时都需要在变量前加上"$" 符号(第一次赋值及在For循环的头部不用加"$"符号);2,BASH 中没有浮点运算,因此也就没有浮点类型的变量可用;3,BASH 中的整形变量的比较符号与C 语言中完全不同,而且整形变量的算术运算也需要经过let 或expr 语句来处理;2.4 BASH 中的基本流程控制语法BASH 中几乎含有C 语言中常用的所有控制结构,如条件分支、循环等,下面逐一介绍。