《大数据和人工智能交流》头条 向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条 更多的内容。
第1章 Linux基础
在大数据从理论到实际的落地过程中,Linux早已经超出了操作系统的范畴,它在今天甚至被称为大数据运行的平台。对于学过Linux课程的院校,强烈建议把本章复习一下,因为在后续学习过程中大数据的软件、框架全都基于Linux平台,本章的知识点要求为:
?掌握Linux文件管理常用的命令
?掌握Linux的权限管理常用的命令
?掌握Linux的软件包管理常用的命令
?掌握Linux的 络管理常用的命令
?掌握Linux的进程管理常用的命令
?掌握Linux的进程管理常用的命令
?熟悉Linux的shell脚本编程
?熟悉Linux环境下JDK、Tomcat、MySQL软件的安装
一、Linux概述
Linux是一套免费使用和自由传播的,类似Unix的操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和 络协议。它支持32位和64位硬件。Linux继承了Unix以 络为核心的设计思想,是一个性能稳定的多用户 络操作系统。
现在很多企业都将大数据、云计算平台部署在Linux操作系统上,所以学习和使用Linux现在变得意义非常的重大。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
下面主要介绍下CentOS系列的Linux和Ubuntu系列的Linux,这两款Linux在学习和项目实战中也是用的比较多的:
1、CentOS操作系统
CentOS 是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本。每个版本的 CentOS都会通过安全更新方式获得十年的支持。新版本的 CentOS 大约每两年发行一次,而每个版本的 CentOS 会定期更新一次,以便支持新的硬件,这样可以建立一个安全、低维护、稳定、高预测性、高重复性的 Linux 环境。CentOS是Community Enterprise Operating System的缩写。
CentOS 是RHEL(Red Hat Enterprise Linux)源代码再编译的产物,相对于其他 Linux 发行版,其稳定性值得信赖。
CentOS 加入红帽后不变的是:
(1) CentOS 继续免费
(2)保持赞助内容驱动的 络中心不变
(3)Bug、Issue 和紧急事件处理策略不变
(4) Red Hat Enterprise Linux 和 CentOS 防火墙也依然存在
变化的是:
(1)我们是为红帽工作,不是为 RHEL
(2)红帽提供构建系统和初始内容分发资源的赞助
(3) 一些开发的资源包括源码的获取将更加容易
(4)避免了原来和红帽上一些法律的问题
现在最新版本为 CentOS 7.6,上个版本是7.5。上游RHEL 7主要将内核更新至3.10.0;支持Linux容器(Docker),Open VMware Tools及3D图像能即装即用,Open JDK7作为缺省JDK,ext4及XFS的LVM快照,转用systemd、firewalld及GRUB2,XFS作为缺省文件系统,内核空间内的iSCSI及FCoE,支持PTPv2,支持40G 卡等 。
2、Ubuntu操作系统
Ubuntu(又称乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。
Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的 区力量,用户可以方便地从 区获得帮助。Ubuntu对GNU/Linux的普及特别是桌面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩。
ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。
二、Linux文件系统
操作系统是管理计算机硬件和软件资源的系统软件,是硬件与用户之间沟通的桥梁。为了使计算机系统能协调、高效和可靠地进行工作,同时也为了给用户一种方便友好地使用计算机的环境,和Windows操作系统一样典型的操作系统应该具有:文件管理的功能、 络管理的功能、 进程管理、内存管理的功能等等。
为了使用这些管理功能,操作系统通常提供给我们两种人机交互方式:
(1)图形界面
例如Windows操作系统,优点是人性化程度高,缺点也非常明显:需要开发重量级别、大量级别的人际交互的软件系统,耗费大量的系统资源,特别可靠性、稳定性、安全性堪忧,对于专业技术人员非常的不适合,对于普通用户非常的适合。
(2)命令行终端
我们Linux大多数采取这种方式,和Windows刚好相反。缺点是人性化程度低,但是优点点也非常明显:需要开发轻量级别、少量级别的人际交互的软件系统,对系统资源消耗极小,特别可靠性、稳定性、安全性非常高,甚至常年不宕机,对于专业技术人员非常的适合,对于普通用户不适合。
综上所述,我们主要讲解基于命令行终端的Linux操作系统管理的常用命令,至于想深入了解Linux操作系统其它命令请大家查阅更多资料,这里所列举的在实际学习和项目实战中基本够用。
(一)Linux的文件管理
文件管理系统是操作系统及其它大数据系统(例如:hadoop分布式文件系统HDFS)的重要功能,Linux文件系统的目录结构如下:
文件系统中的根目录符 为:”/”,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录不存放文件。下面对根目录下的子目录逐一介绍:
(1)”/bin”和”/usr/bin目录
该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。
(2)”/boot”目录
该目录中存放系统的内核文件和引导装载程序文件。
(3)”/dev”目录
设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及 卡等)的对应文件,包括字符设备和块设备等,常用的是挂载光驱mount /dev/cdrom/mnt。
(4)”/etc”目录
系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系统有关)、/etc/sysconfig(与 络有关)、/etc/xinetd.d修改配置文件之前记得备份。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。
(5)”/home”目录
系统默认的用户宿主目录,新增用户账 时,用户的宿主目录都存放在此目录下,”~”表示当前用户的宿主目录,”~lily”表示用户lily的宿主目录。
(6)”/root”目录
系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
(7)”/sbin、/usr/sbin、/usr/local/sbin”目录
放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能查看而不能设置和使用。
(8)”/tmp”目录
一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。一些命令和应用程序会用的到这个目录,该目录下的所有文件会被定时删除,以避免临时文件占满整个磁盘。
(9)”/usr”目录
应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,/usr/local 存放软件升级包,/usr/share/doc 系统说明文件存放目录。
(9)”/var”目录
放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log。/var/log/message: 所有的登录文件存放目录。/var/spool/mail: 邮件存放的目录。 /var/run: 程序或服务启动后。建议单独分区,设置较大的磁盘空间。
(10)”/lib、/usr/lib、/usr/local/lib”目录
系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,该目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令,目录/lib/modules包含了可加载的内核模块,/lib目录存放了所有重要的库文件,其他的库文件则大部分存放在/usr/lib目录下。
其它的目录简介:
(1)”/lost+fount”目录
在EXT2或EXT3文件系统中,当系统意外崩溃或机器意外关机,产生的一些文件碎片放在这里。在系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方法来修复,或者移动文件到运来的位置上。
(2)”/mnt,/media”目录
mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如floppy,cdrom。这样当挂载了一个设备如光驱时,就可以通过访问目录/mnt/cdrom下的文件来访问相应的光驱上的文件了。
(3)”/opt”目录
给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下。
三、Linux操作系统管理的常用命令
Linux的常用命令有文件管理、权限管理、软件包管理、 络管理、进程管理、进程管理等命令。这里只是列举项目实战使用频度最高的,其它的命令及其参数请大家查阅帮助或者有关参考书。
(一)文件管理命令
1、文件管理
(1)ls命令
ls命令的功能是显示指定目录下的文件目录清单。该命令常用格式及其参数说明如下:
ls -a 参数-a的功能:显示隐含文件
ls -l 以长格式列表输出指定目录中的文件清单
ls -R 递归显示
例如:
[root@localhost dev]# ls -l
crw-rw—-. 1 root video 10, 175 Oct 10 22:18 agpgart
drwxr-xr-x. 2 root root 620 Oct 10 22:18 block
lrwxrwxrwx. 1 root root 3 Oct 10 22:18 cdrw -> sr0
lrwxrwxrwx. 1 root root 13 Oct 10 22:18 fd -> /proc/self/fd
srw-rw-rw-. 1 root root 0 Oct 10 22:18 log
brw-rw—-. 1 root disk 7, 0 Oct 10 22:18 loop0
下面对显示的文件进行说明:
文件基本信息:
文件类型 文件权限 文件个数 属主 属组 大小 日期 时间 文件名
d rwxrwxr-x 2 lily group1 2048 Aug 17 09:10 file
Linux文件有三种权限,即r读权限、w写权限和x执行权限
属主 属组 其他用户
rwx rwx r-x
文件的类型:
d :表示目录文件,在Linux中目录也是文件,不仅如此,实际上在Linux中任何设备也可以被当作文件处理。
l :表示符 连接文件
b :表示块设备文件。例如硬盘的设备文件/dev/hda,其中字母a表示 第一块,h表示IDE类型的硬盘,SCSI类型的硬盘用s表示; 分区也有相对应的设备文件,如/dev/sdb3,表示第2块SCSI硬盘上的第3个分区。
c :表示字符设备文件,如/dev/tty1。
p :表示管道文件。
s :表示套接字文件
(2)cd命令
Cd命令的功能为改变文件的目录,例如:
(3)pwd命令
pwd的功能为显示当前目录,例如:
(4)mkdir命令
mkdir的功能为在当前目录下创建目录,其中参数p为递归创建目录。
示例-1:创建d1文件夹
示例-2:递归创建文件夹
在”mkdir -p a/b/c”命令 参数-p功能是如果要创建的目录的父目录不存在,则先创建其父目录,再创建该目录,操作演示如下:
(5)cp命令
语法:
cp 源文件 目标文件
-f:强制执行
-i:若目标文件已经存在,在覆盖时先询问操作是否进行
-r:递归复制,用于目录的复制行为
示例-1 :将/usr/local/dir1下所有java为扩展名的文件复制到/usr/local/dir2
cp /usr/local/dir1/*.java /usr/local/dir2
示例-2:将/usr/local/dir1下所有内容复制到/usr/local/dir2
cp /usr/local/dir1/* /usr/local/dir2
(6)mv命令
功能:如果mydir1存在且是个目录,则将文件myfile移动到目录mydir1中
示例1:将文件移动到目录中
mv myfile mydir1
功能:将文件(或目录)myfile改名为myfile2
示例2:文件改名
mv myfile myfile2
(7)rm命令
-r:是递归的意思,即可以删除非空目录
-f:是强制的意思
示例1:
rm demo.java
示例2:
rm -rf /usr/local/dir1/*
(8)cat命令
功能:显示文件内容
示例-1:显示指定文件myfile的内容
cat myfile
(9)more命令
功能: 分屏显示指定文件httpd.conf的内容
示例-1:
more /etc/httpd/conf/httpd.conf
(10)head命令
功能:默认显示指定文件的头10行的内容。使用参数-n设置显示指定行数
示例-1:
head /etc/httpd/conf/httpd.conf
示例-2:
本例会显示文件的头12行的内容
head -n 12 /etc/httpd/conf/httpd.conf
基本上vi可以分为三种状态,分别是命令模式、插入模式和底行模式。
1、命令模式
用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。以下是常用的几个命令:
(1)i 切换到输入模式,以输入字符。
(2)x 删除当前光标所在处的字符。
(3): 切换到底线命令模式,以在最底一行输入命令
2、插入模式
在命令模式下按下i就进入了输入模式
3、底行模式
在命令模式下按下:(英文冒 )就进入了底线命令模式,除冒 外还有:
(1)q 退出程序
(2)w 保存文件
如下图所示:
示例-1
步骤1:输入vim hello命令,这时候默认为命令模式
步骤2:按”i”键,转换为插入模式
步骤3:输入内容
步骤5:按”:wq”保存并退出
步骤6:查看hello的内容
4、vim的删除功能
(1)dd
删除光标所在行
5、复制和粘贴
yy 复制光标所在行
p 粘贴输出
删除、复制和粘贴总结如下表所示:
5、光标、快捷键等操作
6、保存文件的操作
7、查找功能
8、撤销功能
(三)Linux的权限管理
Linux权限管理常用的命令为chmod权限操作命令,其常用方式如下
(1)chmod字母方式
u–针对属主
g–针对属组
o–针对其他用户
a–针对所有用户
= 表示赋予(设置)指定权限,要注意它会覆盖原权限
+ 表示在原有权限的基础上增加指定权限
– 表示在原有权限的基础上去掉指定权限
r、w、x三种权限,既可以单独使用也可以组合使用
示例1: chmod u+x host.conf
功能:为文件host.conf的属主增加执行权限
示例2: chmod g-w,o=x host.conf
功能:将文件host.conf的属组去掉写权限,同时将其他用户设置为只有执行权限,而文件属主的权限不变
(2)chmod:数字方式
r—–4 读权限
w—–2 写权限
x—–1 执行权限
无—–0 无权限
例如:
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
示例-1:
示例-2:
chmod 777 myFile
上述命令等同于chmod a=rwx myFile。
(四)Linux的软件包管理
在实际的软件项目及其大数据项目开发中,tar命令是我们经常使用的命令。tar命令是经典的备份/还原命令,几乎所有最新的软件包都是通过tar包发布的。
(1)打包(备份)
参数-c的功能是打包(创建),
参数-v是显示处理过程,
参数-f是用来指定文档名;
示例:
$ tar -cvf myetc.tar /etc
本例的功能是:将目录/etc打包为一个名为myetc.tar的文档
(2)解压缩还原
功能:将参数-c换成-x即可实现还原释放的功能。
$ tar -zxvf myetc.tar.gz
本例没有指明还原的位置,则将会还原在当前目录下;如果想指明还原位置可用参数-C,请尝试如下示例:
$ tar -zxvf myetc.tar.gz -C /tmp
(五)Linux的 络管理
Linux操作系统具有强大的 络管理功能,除了自身具有很强的 络安全性以外,几乎支持所有主流防火墙等 络安全软件,所有Linux的强大 络功能给我们的大数据安全带来了极大的方便,在以后的大数据学习中,我们经常使用的 络命令如下:
1、 ping命令
ping 将数据包发向用户指定地址。当包被接收,目标机器发送返回数据包。ping 主要有两个作用:
(1) 用来确认 络连接是畅通的。
(2) 用来查看连接的速度信息。
如果你 ping www.baidu.com 它将返回它的 ip 地址 。你可以通过 ctrl+C 来停止命令。
2、ifconfig
查看用户 络配置。它显示当前 络设备配置。对于需要接收或者发送数据错误查找,这个工具极为好用。
3、netstat命令
netstat命令用于显示本机上与IP、TCP、UDP和ICMP协议相关的统计数据,该命令经常被用于检验本机各端口的 络连接情况。
Netstat常用的命令使用举例如下:
(1)netstat –a
显示所有的有效连接信息,包括已建立的连接和监听的连接请求。
(2)netstat -i
显示系统中所有 络接口信息,包括物理 卡、 卡别名和本地回环 卡。
(3)netstat –n
显示系统中所有已建立的连接。
(4)netstat –ta
显示有效的TCP连接。
(5)netstat –ua
显示有效的UDP连接。
(6)netstat -an | grep 3306
显示端口 为3306的 络连接信息。
(六)Linux的进程管理
操作系统的进程管理是Linux的重要功能,在我们的大数据项目实战中经常用到ps、jps、kill命令。
1、ps具体命令解释如下:
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径
ps -e 此参数的效果和指定”A”参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信 的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编 >
指定终端机编 ,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。
2、强制杀死进程
kill -9 进程ID
3、显示java进程jps
Jps是我们以后经常用到的命令,前提是你必须安装jdk,其使用操作如下:
四、Linux的shell脚本编程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行
由于历史原因,UNIX系统上有很多种Shell:
(1) sh(Bourne Shell)
由Steve Bourne开发,各种UNIX系统都配有sh。
(2) csh(C Shell)
(3)ksh(Korn Shell)
由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上/bin/sh往往是指向/bin/ksh的符 链接。
(4)tcsh(TENEX C Shell)
是csh的增强版本,引入了命令补全等功能,在FreeBSD、MacOS X等系统上替代了csh。
(5)bash(Bourne Again Shell)
由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符 链接。虽然如此,bash和sh还是有很多不同的,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,有些行为并不一致,所以bash需要模拟sh的行为:当我们通过sh这个程序名启动bash时,bash可以假装自己是sh,不认扩展的命令,并且行为与sh保持一致。
(一)最简单的shell
1、Shell的结构:
(1)、#!指定执行脚本的shell
(2)、#注释行
(3)、控制结构
2、创建shell的步骤:
chmod u+x demo.sh
(3)、执行程序 ./demo.sh
也可以使用sh demo.sh来执行
使用 sh -x demo.sh中的x表示脚本的执行过程
使用 sh -n demo.sh不执行脚本,只是检查语法的错误,返回所有错误信息
(二)shell的变量
Shell变量包括:临时变量和环境变量,临时变量时shell程序内部定义的,对其他程序不可见,包括用户自定义变量和位置变量;环境变量就是全局变量,不随着shell脚本的结束而消失。
在使用变量值的时候,要在变量名前加前缀”$”
变量赋值用”=”,注意两边不能有空格
变量赋值举例:
1、 NUM=1
2、将一个命令的执行结果赋给变量,例如
time=`date`
time=(date +%F) echo $time
3、将一个变量赋给另一个变量:A=$B
查看变量的值:echo $A
字符串用单引 或者双引
双引 有自动解析变量的功能
例如:
sum=100
echo “The total is $sum”
set为显示所有的环境变量
删除变量unset
(三)位置变量和特殊变量
1、位置变量
Shell解释执行用户命令的时候,将命令行的第一部分作为命令名,其他部分作为参数。有出现在命令行上的位置确定的参数成为位置参数
例如:ls -l file1 file2 file3
$0位置被个程序的文件名占用,其它剩余位置$1 $2 $3…$9
例如:在test.sh中有如下内容
mkdir files$1_s00$2_class$3
执行时候./test.sh 001 1 001,表示$0被test.sh占用、$1被001占用、1被$2占用,001被$3占用
2、特殊变量
$*这个程序的所有参数
$#这个程序的参数个数
$$这个程序的 PID
$!执行上一个后台的PID
$?执行上一个命令的返回值
例如有test.sh程序,内容如下:
echo ‘$# is:’ $#
echo ‘$* is:’ $*
echo ‘$? is:’ $?
echo ‘$$ is:’ $$
echo ‘$0 is:’ $0
运行 ./test.sh p1 p2 p3 后查看结果
(四)shell的一些常用命令
1、Read命令:从键盘读入数据,赋给变量
例如 read x 100 ; echo $x
如程序test.sh:
read a1 a2 a3
echo “the a1 value is $a1”
echo “the a2 value is $a2”
echo “the a3 value is $a3”
则执行的时候
./test.sh 100 200 300
2、expr指令:对整型变量进行算术运算
例如expr 100 + 200注意加 左右有空格
del@box:/temp$ expr 100 + 200
300
另外注意乘法为” *”,要有转义符
例如3 * 5
复杂的运算:expr `expr 6 + 9` / 3
将运算的结果赋予变量 x=`expr 1 + 2`
3、变量测试语句:
测试变量是否相等、为空等情况。语法:test 测试条件;测试范围:整数、字符串、文件
(1)字符串测试:
test str1=str2 测试字符串是否相等
test str1!=str2 测试字符串是否不相等
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
(3)测试整数
test int1 -eq int2 测试int1和int2是否相等
test int1 -ge int2 测试int1是否>=int2
test int1 -gt int2 测试int1是否>int2
test int1 -le int2 测试int1是否<=int2
test int1 -lt int2 测试int1是否<int2
test int1 -ne int2 测试int1和int2是否不相等
(4)文件测试
test -d file 指定文件是否目录
test -f file 指定文件是否常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -a file 指定文件是否存在
test -s file 文件大小是否非0
测试语句一般不单独使用,一般配合if语句来判断,如:
if test -d $1 then
…….
fi
变量测试语句也可以用[]简化,例如:
test -d $1等价于 [ -d $1 ] 注意:中括 左右的表达式要有空格
(五)流程控制
1、选择结构if语句
(1) If [ ]; then
fi
(2) If [ ]; then
else
fi
例如:
If [ $# -ne 2 ]; then
echo “not enough parameters”
exit 0 //0表示正常退出
fi
If[ $1 -eq $2 ];then
echo “$1 equals $2”
fi
(3) If [ ] then
elif [ ]
elif [ ]
else
例如:test.sh内容如下
read file_name
if [ -d $file_name ]
then
echo “This is directory!!!”
elif [ -f $file_name ]
then
echo “This is file!!!”
else
echo “This is nothing!!!”
fi
条件组合查询:
-a :逻辑与,条件都成立的时候结果为真
-o :逻辑或,只要有一个条件成立,结果为真
例如:test.sh内容如下
read file_name
if [ -d $file_name ]
then
echo “This is directory!!!”
elif [ -f $file_name ]
then
echo “This is file!!!”
elif [ -c $file_name -o -b $file_name ]
echo “This is device file!!!”
else
echo “This is nothing!!!”
fi
2、循环结构
(1)形式-1:for-in
语法:
for 变量 in 名字表
do
…..
done
例如:
for x in 11 22 33 44 55 66
do
echo “x value is : $x”
done
(2)形式-2:for
语法:
for ((初始值; 循环条件; 增量 ))
do
指令…
done
示例-1:输出1 2 3 4 5
for((i = 1;i <= 5;i++))
do
echo $i
done
示例-2:求1—100的和
for (( i=1; i<=100; i++ ))
do
sum=$(( $sum + $i ))
done
echo “1+2+3+…+100=$sum”
3、case语句
语法:
case “$variable” in
“$condition1” )
command…
;;
“$condition2” )
command…
;;
esac
对变量使用””并不是强制的, 因为不会发生单词分割
每句测试行, 都以右小括 )来结尾
每个条件判断语句块都以一对分 结尾 ;;
case块以esac (case的反向拼写)结尾
例如,有下列程序test.sh内容如下:
read c
case $c in
a)
echo “this is a”
;;
b)
echo “this is b”
;;
c)
echo “this is c”
;;
*)
echo “none”
esac
4、while循环
基本语法:
while [ condition ]
do
command1
command2
command3
done
例如,test.sh中的写法如下:
num=1
while [ $num -le 10 ]
do
sum=`expr $num * $num`
echo $sum
num=`expr $num+1`
done
5、break和continue语句
break:结束循环
continue:结束本次循环,开始新的一轮循环
例如:
while true
do
echo “============================”
echo ” 1 add “
echo “2 delete “
echo “3 update”
echo “4 Quit”
read num_op
case $num_op in
1)
echo “this is add operation”
;;
2)
echo “this is delete operation”
;;
3)
echo “this is update operation”
;;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!