Linux 第10章 ~ 第17章 大数据定制篇shell编程
文章目录
- Linux 第10章 ~ 第17章 大数据定制篇shell编程
- 第10章 实操篇 组管理和权限管理
- 10.1 Linux组基本介绍
- 10.2 文件/目录 所有者
- 10.3 组的创建
- 10.4 文件/目录 所在组
- 10.5 其他组
- 10.6 改变用户所在组
- 10.7 权限的基本介绍
- 10.8 rwx权限详解
- 10.10 修改权限 - chmod
- 10.10.1 基本说明
- 10.11 修改文件所有者 - chown
- 10.12 修改文件所在组 - chgrp
- 第11章 实操篇 crond任务调度
- 11.2 概述
- 11.3 基本语法
- 11.4 快速入门
- 11.6 crond相关指令
- 第12章 实操篇 Linux磁盘分区、挂载
- 12.1 分区基础知识
- 12.2 Linux分区
- 12.5 磁盘情况查询
- 12.6 磁盘情况 - 工作实用指令
- 第13章 实操篇 网络配置
- 13.3 ping测试主机之间网络连通
- 13.4 Linux网络环境配置
- 第14章 实操篇 进程管理
- 14.1 进程的基本介绍
- 14.2 显示系统执行的进程
- 14.3 终止进程kill和killall
- 14.4 查看进程树pstree
- 14.5 服务(Service)管理
- 14.6 动态监控进程
- 第15章 实操篇 RPM和YUM
- 15.1 rpm包的管理
- 15.2 yum
- 第17章 大数据定制篇shell编程
- 17.1 为什么要学习shell编程
- 17.2 Shell是什么
- 17.3 shell编程快速入门 - shell脚本的执行方式
- 17.4 shell的变量
- 17.5 设置环境变量
- 17.6 位置参数变量
- 17.7 预定义变量
- 17.8 运算符
- 17.9 条件判断
- 17.10 流程控制
- 17.11 read读取控制台输入
- 17.12 函数
- 17.11 read读取控制台输入
- 17.12 函数
第10章 实操篇 组管理和权限管理
10.1 Linux组基本介绍
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。
- 所有者
- 所在组
- 其他组
- 改变用户所在的组
10.2 文件/目录 所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。
10.2.1 查看文件的所有者
指令:ls –ahl
10.2.2 修改文件所有者
chown 用户名 文件名
10.3 组的创建
基本指令
groupadd 组名
10.4 文件/目录 所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。
10.4.1 查看文件/目录所在组
基本指令
ls –ahl
10.4.2 修改文件所在的组
chgrp 组名 文件名
10.5 其他组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
10.6 改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某
个用户所在的组。
10.6.1 改变用户所在组
- usermod –g 组名 用户名
- usermod –d 目录名 用户名 改变该用户登陆的初始目录。
10.7 权限的基本介绍
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 ab
0-9位说明
- 第0位确定文件类型(d, - , l , c , b)
- d目录
- -普通文件
- l 软链接
- c 字符设备
- b 块文件、硬盘
- 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
- 第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
- 第7-9位确定其他用户拥有该文件的权限 —Other
10.8 rwx权限详解
10.8.1 rwx作用到文件
- [ r ]代表可读(read): 可以读取,查看
- [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
- [ x ]代表可执行(execute):可以被执行
10.8.2 rwx作用到目录
- [ r ]代表可读(read): 可以读取,ls查看目录内容
- [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
- [ x ]代表可执行(execute):可以进入该目录
10.10 修改权限 - chmod
10.10.1 基本说明
通过chmod指令,可以修改文件或者目录的权限。
10.10.2 第一种方式:+、-、=变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
- chmod u=rwx,g=rx,o=x 文件目录名
- chmod o+w 文件目录名
- chmod a-x 文件目录名
10.10.3 第二种方式:通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
10.11 修改文件所有者 - chown
10.11.1 基本介绍
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效
10.12 修改文件所在组 - chgrp
10.12.1 基本介绍
chgrp newgroup file 改变文件的所有组
第11章 实操篇 crond任务调度
11.2 概述
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
11.3 基本语法
crontab [选项]
-e | 编辑crontab定时任务 |
---|---|
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
11.4 快速入门
11.4.1 任务要求
设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab –e命令。
接着输入任务到调度文件
如:*/1 * * * * ls –l /etc/ > /tmp/to.txt
意思说每小时的每分钟执行ls –l /etc/ > /tmp/to.txt命令
11.4.2 步骤
- cron -e
- /1***ls -l / etc >> /tmp/to.txt
- 当保存退出后就启动程序
- 每一分钟都会自动的调用ls - l /etc >> /tmp/to.txt
11.4.3 参数细节说明
-
5个占位符
项目 含义 范围 第一个* 一小时当中的第几分钟 0-59 第二个* 一天当中的第几小时 0-23 第三个* 一个月当中的第几天 1-31 第四个* 一年当中的第几月 1-12 第五个* 一周当中的星期几 0-7(0、7都表示星期日) -
特殊符号的说明
特殊符号 含义 * 代表任何时间 , 代表不连续的时间 - 代表连续的时间范围 */n 代表每隔多久执行一次 -
特定时间执行任务案例
时间 含义 4522***命令 在22点45分执行命令 017**1命令 每周一的17点0分执行命令 051,15**命令 每月1号和15号的凌晨5点0分执行命令 404**1-5命令 每周一到周五的凌晨4点40分执行命令 */104***命令 每天的凌晨4点,每隔10分钟执行一次命令 001,15*1命令 每月1号和15号,每周一的0点0分就会执行命令
11.6 crond相关指令
- conrtab –r:终止任务调度。
- crontab –l:列出当前有那些任务调度
- service crond restart [重启任务调度]
第12章 实操篇 Linux磁盘分区、挂载
12.1 分区基础知识
12.1.1 分区的方式
- mbr分区
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但拥有最好的兼容性
- gtp分区
- 支持无限多个主分区(但操作系统可能限制,比如 windows下最多128个分区)
- 最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB )
- windows7 64位以后支持gtp
12.1.2 Windows下的磁盘分区
12.2 Linux分区
12.2.1 原理介绍
Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
12.2.2 硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
12.2.3 使用lsblk指令查看当前系统的分区情况
命令 :lsblk 或者 lsblk -f
12.3 挂载
给Linux系统增加一个新的硬盘,并且挂载到/home/newdisk
12.3.1 如何增加一块硬盘
-
虚拟机添加硬盘
-
分区
分区命令 fdisk /dev/sdb
-
格式化
格式化磁盘 分区命令:mkfs -t ext4 /dev/sdb1
其中ext4是分区类型 -
挂载
挂载: 将一个分区与一个目录联系起来,
mount 设备名称 挂载目录
例如: mount /dev/sdb1 /newdisk
umount 设备名称 或者 挂载目录
例如: umount /dev/sdb1 或者 umount /newdisk【用命令行挂载重启后会失效】
-
设置可以自动挂载 。
通过修改/etc/fstab实现挂载
添加完成后 执行mount –a 即刻生效
12.5 磁盘情况查询
12.5.1 查询系统整体磁盘使用情况
基本语法 df -h
12.5.2 查询指定目录的磁盘占用情况
基本语法 du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- –max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
12.6 磁盘情况 - 工作实用指令
-
统计/home文件夹下文件的个数
ls -l /home | grep “^-” | wc -l
-
统计/home文件夹下目录的个数
ls -l /home | grep “^d” | wc -l
-
统计/home文件夹下文件的个数,包括子文件夹里的
ls -lR /home | grep “^-” | wc -l
-
统计文件夹下目录的个数,包括子文件夹里的
ls -lR /home | grep “^d” | wc -l
-
以树状显示目录结构
tree
第13章 实操篇 网络配置
13.3 ping测试主机之间网络连通
13.3.1 基本语法
ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)
13.4 Linux网络环境配置
13.4.1 第一种方式 : 自动获取
特点:linux启动后会自动获取IP
缺点是每次自动获取的ip地址可能不一样。
13.4.2 第二种方式 : 指定固定的ip
直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑 vi /etc/sysconfig/network-scripts/ifcfg-eth0
【重启网络服务或者重启系统生效 service network restart 、reboot】
第14章 实操篇 进程管理
14.1 进程的基本介绍
在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
14.2 显示系统执行的进程
14.2.1 说明
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。
显示信息
字段 | 说明 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此进程所消CPU时间 |
CMD | 正在执行的命令或进程名 |
- ps -a:显示当前终端的所有进程信息
- ps -u:以用户的格式显示进程信息
- ps -x:显示后台进程运行的参数
14.2.2 ps指令详解
指令:ps –aux|grep xxx
指令说明
- System V展示风格
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,缩写 .
- STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
14.3 终止进程kill和killall
14.3.1 介绍
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
基本语法:
kill [选项] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
常用选项:
-9 :表示强迫进程立即停止
14.4 查看进程树pstree
14.4.1 基本语法
pstree [选项] ,可以更加直观的来看进程信息
常用选项:
- -p :显示进程的PID
- -u :显示进程的所属用户
14.5 服务(Service)管理
14.5.1 介绍
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
14.5.2 service管理指令
service 服务名 [start | stop | restart | reload | status]
在CentOS7.0后 不再使用service ,而是 systemctl
14.5.5 查看服务名
- 方式1:使用setup -> 系统服务 就可以看到。
- 方式2: /etc/init.d/服务名称
14.5.6 服务的运行级别(runlevel)
查看或者修改默认级别: vi /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS),不支持网络
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
14.5.7 开机的流程说明
开机 → BIOS → /boot → init进程1 → 运行级别 → 运行级对应的服务
14.5.8 chkconfig指令
通过chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭
基本语法
- 查看服务 chkconfig --list|grep xxx
- chkconfig 服务名 --list
- chkconfig --level 5 服务名 on/of
14.6 动态监控进程
14.6.1 介绍
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
基本语法:
top [选项]
选项说明
选项 | 功能 |
---|---|
-d 秒数 | 指令top命令每隔几秒更新。默认3秒 |
-i | 使top不显示任何闲置或者僵尸进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
交互操作说明
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以PID排序 |
q | 退出top |
14.6.5 查看系统网络情况 netstat
netstat [选项]
选项说明
- -an 按一定顺序排列输出
- -p 显示哪个进程在调用
第15章 实操篇 RPM和YUM
15.1 rpm包的管理
15.1.1 介绍
一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
15.1.2 rpm包的简单查询指令
查询已安装的rpm列表 rpm –qa|grep xx
一个rpm包名:firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统: el6.centos.x86_64
表示centos6.x的64位系统
如果是i686、i386表示32位系统,noarch表示通用。。
15.1.4 rpm包的其他查询指令
- rpm -qa :查询所安装的所有rpm软件包
- rpm -q 软件包名 :查询软件包是否安装
- rpm -qi 软件包名 :查询软件包信息
- rpm -ql 软件包名 :查询软件包中的文件
- rpm -qf 文件全路径名 查询文件所属的软件包
15.1.5 卸载rpm包
基本语法
rpm -e RPM包的名称
15.1.6 安装 rpm包
基本语法
rpm -ivh RPM包全路径名称
参数说明
- i=install 安装
- v=verbose 提示
- h=hash 进度条
15.2 yum
15.2.1 介绍
Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
15.2.2 yum的基本指令
- 查询yum服务器是否有需要安装的软件
yum list|grep xx软件列表 - 安装指定的yum包
yum install xxx 下载安装
第17章 大数据定制篇shell编程
17.1 为什么要学习shell编程
- Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
- 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
- 对于大数据程序员来说,需要编写Shell程序来管理集群。
17.2 Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
17.3 shell编程快速入门 - shell脚本的执行方式
17.3.1 脚本格式要求
- 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DhRQISJ-1657760625303)(C:\Users\DingJiaxiong\AppData\Roaming\Typora\typora-user-images\1657759668627.png)]
17.4 shell的变量
17.4.1 shell变量的介绍
- Linux Shell中的变量分为,系统变量和用户自定义变量。
- 系统变量:
H
O
M
E
、
HOME、
HOME、PWD、
S
H
E
L
L
、
SHELL、
SHELL、USER等等
比如: echo $HOME 等等… - 显示当前shell中所有变量:set
17.4.2 shell变量的定义
基本语法
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,注意:不能unset
17.4.3 定义变量的规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
- 等号两侧不能有空格
- 变量名称一般习惯为大写
17.4.4 将命令的返回值赋给变量
- A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls -la) 等价于反引号
17.5 设置环境变量
17.5.1 基本语法
- export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
- source 配置文件 (功能描述:让修改后的配置信息立即生效)
- echo $变量名 (功能描述:查询环境变量的值)
17.6 位置参数变量
17.6.1 介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
17.6.2 基本语法
- $n (功能描述:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
- ∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, ∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
- @ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
- $#(功能描述:这个变量代表命令行中所有参数的个数)
17.7 预定义变量
17.7.1 基本介绍
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。
17.7.2 基本语法
- $$ (功能描述:当前进程的进程号(PID))
- $! (功能描述:后台运行的最后一个进程的进程号(PID))
- $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
17.8 运算符
17.8.2 基本语法
- “ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
- expr m + n
注意expr运算符间要有空格 - expr m - n
- expr *, /, % 乘,除,取
17.9 条件判断
17.9.1 基本语法
[ condition ](注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)
17.9.3 常用判断条件
- 两个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于 - 按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限 - 按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
17.10 流程控制
17.10.1 if判断
基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [条件判断式]
then
程序
fi
注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式
17.10.2 case语句
基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
17.10.3 for循环
基本语法1
for 变量 in 值1 值2 值3…
do
程序
done
基本语法2
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
17.10.4 while循环
基本语法1
while [ 条件判断式 ]
do
程序
done
17.11 read读取控制台输入
17.11.1 基本语法
read(选项)(参数)
选项:
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
- 参数
变量:指定读取值的变量名
17.12 函数
17.12.1 函数介绍
shell编程和其它编程语言一样,有系统函数,也可以自定义函数。
17.12.2 系统函数
- basename基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。 - dirname基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
17.12.4 自定义函数
基本语法
基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
本语法1
while [ 条件判断式 ]
do
程序
done
17.11 read读取控制台输入
17.11.1 基本语法
read(选项)(参数)
选项:
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
- 参数
变量:指定读取值的变量名
17.12 函数
17.12.1 函数介绍
shell编程和其它编程语言一样,有系统函数,也可以自定义函数。
17.12.2 系统函数
- basename基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。 - dirname基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
17.12.4 自定义函数
基本语法
基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]