Linux常用shell操作
本文最后更新于:4 个月前
Linux
1、Linux目录结构
介绍
Linux
文件系统采用级层式树状目录结构,最上层为根目录/
在Linux
的世界中,一切皆为文件。
以下是对这些目录的解释:
/bin:**【常用】**
bin
是 Binaries (二进制文件) 的缩写,这个目录存放着最经常使用的命令。/boot: 【常用】
这里存放的是启动Linux
时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :
dev
是 Device(设备) 的缩写, 该目录下存放的是Linux
的外部设备,在Linux
中访问设备的方式和访问文件的方式是相同的。/etc: 【常用】
etc
是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。/home:**【常用】**
用户的主目录,在Linux
中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。/lib:
lib
是Library
(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。/media:【常用】
linux
系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux
会把识别的设备挂载到这个目录下。/mnt:【常用】
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt 上,然后进入该目录就可以查看光驱里的内容了。/opt:
opt
是optional
(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。/proc:**【不能动】**
proc
是Processes
(进程) 的缩写,/proc
是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:**【常用】**
该目录为系统管理员,也称作超级权限者的用户主目录。/sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。/selinux:
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。/srv:**【不能动】**
该目录存放一些服务启动之后需要提取的数据。/sys:**【不能动】**
这是
Linux2.6
内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统sysfs
。sysfs
文件系统集成了下面3种文件系统的信息:针对进程信息的proc
文件系统、针对设备的devfs
文件系统以及针对伪终端的devpts
文件系统。该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:
tmp
是temporary
(临时) 的缩写这个目录是用来存放一些临时文件的。/usr:**【常用】**
usr
是unix shared resources
(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows
下的 program files 目录。/usr/bin:
系统用户使用的应用程序。/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。/usr/src:
内核源代码默认的放置目录。/var:
var
是variable
(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc:上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin:这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。值得提出的是,
/bin
,/usr/bin
是给系统用户使用的指令(除root外的通用户),而/sbin
,/usr/sbin
则是给 root 使用的指令。/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
可以随便动的目录:opt、home、root、tmp。
2、Vi、Vim和Vi文本编辑器
Linux内置了Vi文本编辑器。
Vim具有程序编辑的能力,可以用颜色辨别语法的正确性。
三种模式:
- 正常模式(默认):可以复制、粘贴、删除
- 插入模式:按i、I、o、O、a、A、r、R
- 命令行模式:按
Esc
再按:
进入,wq
(保存并退出)、q
(退出)、q!
(强制退出且不保存)
各种模式的切换:
快捷键
拷贝当前行
yy
,拷贝当前行和向下的5行yy5
,粘贴p
删除当前行
dd
,删除当前行和向下的5行5dd
查找某个单词
/xx
,按n
查找下一个:noh
取消高亮设置行号
:set nu
,取消行号:set nonu
到达文件最末行
G
,最首行gg
撤销
u
快速定位到某一行
5 shift+g
y$
复制当前位置到结尾,y^
复制当前位置到开头d$
删除当前位置到结尾,d^
删除当前位置到开头yw
复制单词,dw
删除单词
3、开机、重启和用户注销登录
开关机:
立即关机
shutdown -h now
一分钟后关机
shutdown -h 1
立刻重启
shutdown -r now
关机
halt
重启
reboot
把内存数据同步到磁盘
sync
登录与注销:
- 登录root用户
su - root
- 注销用户
logout
4、用户管理
在Linux中,任何一个需要使用系统资源的用户,都必须向系统管理员申请一个账号。
需要root权限才能使用。
4.1、添加用户
useradd 用户名
- 当用户创建成功后,会在
home
目录自动创建一个和用户同名的家目录。- 可以通过
useradd -d 指定目录 新的用户名
,给新创建的用户指定家目录。
4.2、设置密码
passwd 用户名
,然后输入修改后的密码。
pwd
是显示当前的目录
4.3、删除用户
userdel 用户名
:保留了家目录userdel -r 用户名
:不保留家目录
一般建议保留用户的家目录。
4.4、查询用户
id 用户名
4.5、切换用户
su - 用户名
- 权限低的到权限高的需要输入密码,反之则不需要。
- 如果需要退出到原来的用户,则输入
logout
/exit
。
4.6、查询当前用户
whoami
4.7、用户组
组的作用:系统可以对有共性的多个用户进行统一管理。
新增组:groupadd 组名
删除组:groupdel 组名
增加用户时直接加上组:useradd - g 组名 用户名
修改用户的组:usermod -g 组名 用户名
/etc/passwd
:用户配置文件
/etc/shadow
:口令配置文件
/etc/group
:组配置文件
5、实用指令
5.1、运行级别
0:关机
1:单用户(找回丢失密码)
2:多用户没有网络服务
3:多用户有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
使用init 数字
来切换不同的运行级别。
使用systemctl get-default
获取默认的运行级别。
使用systemctl set-default 级别
设置默认的运行级别。
5.2、文件目录类
pwd
:显示当前目录的绝对路径
ls
:显示所有的文件或者目录
-a
:把隐藏的文件也显示-l
:以列表的形式显示
cd
:
cd ~
:回到当前用户的家目录cd ..
:回到当前路径的上一级目录
mkdir
:创建目录,默认只能创建单级目录
-p
:可以创建多级目录
rmdir
:删除空目录
rm -rf /文件
:强制删除目录
touch 文件名
:创建一个空文件
cp 文件 目标目录
:将文件拷贝到指定目录
cp -r 目录 目标目录
:将整个目录复制到指令目录下
\cp -r 目录 目标目录
:强制覆盖不提示
rm
:移出目录或者文件夹
-r
:递归删除整个文件夹-f
:强制删除不提示
mv
:
- 在同一文件目录下,是重命名
- 在不同文件目录下,是移动/剪切
cat
:查看文件内容
-n
:显示行号
一般配合管道命令使用:cat -n /etc/profile | more
more
:基于VI编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键。
less
:分屏查看文件的内容,功能与more相似,但又更加强大。每次只加载一部分内容,根据显示需要加载内容,对于显示大型文件具有较高的效率。
echo
:输出内容到控制台。
echo $PATH
:输出环境变量。
echo "hello"
:在控制台输出hello
head
:显示文件的开头部分,默认显示10行。
head -n 数字 文件名
:查看文件开头的x行。
tail
用于输出文件尾部的内容,默认显示10行。
tail -n 5 文件名
:查看文档后5行。
tail -f 文件名
:实时监控文件内容的变化。
>
:输出覆盖,>>
:追加
ls -l > 文件
:将列表的内容覆盖到指定文件。
ls -al >> 文件
:将列表所有(包括隐藏的)内容追加到文件末尾。
cat 文件1 > 文件2
:将文件1内容覆盖到文件2。
echo 内容 >> 文件
:将内容追加到指定文件。
ln
:软连接,也成为符号链接,类似于快捷方式。
ln -s 原文件或目录 软链接名
:给原文件或目录创建一个软链接。
rm -rf /软链接名
:删除软链接,和文件删除方式一致。
history
:查看已经执行过的历史命令。
history 数字
:查看最近使用过的数字个指令。
!5
:执行历史编号为5的指令。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为 d 则是目录
- 当为 - 则是文件;
- 若是 l 则表示为链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
文件属性 | 文件类型 |
---|---|
- | 常规文件,即file |
d | 目录文件 |
b | block device 即块设备文件,如硬盘;支持以block为单位进行随机访问 |
c | character device 即字符设备文件,如键盘支持以character为单位进行线性访问 |
l | symbolic link 即符号链接文件,又称软链接文件 |
p | pipe 即命名管道文件 |
s | socket 即套接字文件,用于实现两个进程进行通信 |
5.3、时间日期类
date
:显示当前日期。
date +%Y
:显示当前年份。
date +%m
:显示当前月份。
date +%d
:显示当前是那一天。
date "+%Y-%m-%d %H:%M:%S"
:显示年月日时分秒。
date -s "时间字符串"
:手动设置时间。
cal
:显示当年当月日历。
cal 2022
:显示全年日历。
5.4、搜索查找类
find
:从指定目录向下递归地遍历各个子目录,将满足条件的文件或目录显示在终端。
- -name:按名称
- -user:按属于指定用户名
- -size:按文件大小,单位有
k
,M
,G
- -n:小于n
- +n:大于n
- n:等于n
1 |
|
1 |
|
1 |
|
locate
:快速定位文件路径。第一次运行前,必须使用updatedb来创建locate数据库。
which
:查看某个指令在哪个目录下。
grep
:过滤查找 【grep (选项) 关键词 文件名】
- -n:显示匹配行及行号
- -i:忽略字母大小写
|
:管道符号,将前一个命令的处理结果输出传递到后面的命令处理。
案例:查找hello.txt文件中,”yes”所在行及其行号
cat hello.txt | grep -n "yes"
grep -n "yes" hello.txt
5.5、压缩和解压类
gzip
:压缩,只能将文件压缩为.gz
文件
gunzip
:解压
zip
:压缩,将文件压缩为.zip
文件
-r
:递归压缩,即压缩目录
zip -r xx.zip 文件路径
:将该文件路径下的文件和目录压缩到xx.zip
unzip -d 文件路径 xx.zip
:将xx.zip解压到指定文件路径
tar
:打包指令,将文件打包为.tar.gz
的文件
tar [选项] xxx.tar.gz 打包的文件[可以多个,中间用空格隔开]
- -c:产生.tar打包文件
- -v:显示详细信息
- -f:指定压缩后的文件名
- -z:打包同时压缩
- -x:解压.tar文件
- -C:解压到指定目录
tar -zcvf ab.tar.gz a.txt b.txt
:把a.txt和b.txt文件压缩为ab.tar.gz
tar -zxvf ab.tar.gz
:解压
tar -zxvf ab.tar.gz -C /opt/tmp2
:将压缩文件解压到指定目录,-C
6、Linux组
6.1、所有者
即文件的创建者。
查看文件所有者:ls -ahl
修改文件所有者:chown 用户名 文件名
6.2、所在组
文件所在组即为该文件所有者所在的组。
查看文件所在组:ls -ahl
修改文件所在组:chgrp 目标组名 文件名
添加组:groupadd 组名
修改用户所在组:usermod -g 新的组名 用户名
6.3、其他组
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。
7、权限管理
前面的 0-9 位表示了文件的权限:
0
:
- l 是链接,相当于快捷方式
link
- d 是目录,即文件夹
directory
- c 是字符设备文件——鼠标、键盘等
- b 是块设备——硬盘等
block
1-3
:文件/目录所有者对该文件/目录拥有的权限 –User
4-6
:文件/目录所有者所在组其他用户对该文件/目录拥有的权限 –Group
7-9
:文件/目录其他组其他用户对该文件/目录拥有的权限 –Other
1表示文件连接数或子目录数
7.1、rwx权限
对于文件:
r
:可以读取,查看
w
:可以修改,但并不代表可以删除该文件——删除的前提是对该文件的目录有写的权限
x
:可以被执行
对于目录:
r
:可以读取,ls 查看目录内容
w
:可以修改,对目录内创建/删除/重命名目录
x
:可以进入该目录,比如可以执行 cd
7.2、chmod【修改文件/目录权限】
第一种方式:u为所有者,g为所在组,o为其他组,a为所有人;+
为添加权限,-
为删除权限,=
赋值权限。
chmod u=rwx,g=rx,o=x 文件/目录
chmod u+x 文件/目录
chmod a+x 文件/目录
第二种方式:r=4,w=2,x=1
chmod u=rwx,g=rx,o=x 文件/目录
相当于:
chmod 751 文件/目录
7.3、chown
chown newowner 文件/目录
:修改所有者
chown newowner:newgroup 文件/目录
:修改所有者,所在组
-R:如果是目录,则使其所有子文件或目录递归生效。
7.4、chgrp
-R:如果是目录,则使其所有子文件或目录递归生效。
chgrp newgroup 文件/目录
:修改所在组
8、定时任务调度
8.1、crond
任务调度是指某个事件执行的特定的命令或程序。
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。
- 个别用户工作:个别用户希望执行某些程序。
crontab
[选项]
- -e:编辑任务
- -l:查询任务
- -r:删除当前用户的所有任务
service crond restart
:重启任务调度
具体指令:*/1 * * * * ls -l /etc > /tmp/to.txt
:每隔一分钟执行一次。
1 |
|
特殊字符:
*
:表示任何时间,
:表示不连续的时间-
:表示连续的时间*/n
:表示每隔多少时间执行一次
案例:
8.2、at
at 命令是一次性定时计划任务,执行一次后就不再执行,at 的守护进程 atd 会以后台模式运行,检查作业队列。atd 默认情况下每 60s 检查一次作业队列,有作业时会检查作业的运行时间,如果作业时间与当前时间匹配,则会执行该作业。
at 命令也可以执行 shell 任务。
ps -ef | grep atd
:检测atd是否在运行
at [选项] [时间]
回车 然后输入执行指令
按 ctrl+D 两次结束 at 命令的输入
选项格式:
时间格式:
atq
查看系统中没有执行的工作任务。
atrm 编号
删除指定任务 ,编号可以通过 atq
查看。
案例:
两天后下午5点执行
/bin/ls /home
at 5pm + 2 days
at > /bin/ls /home
明天下午五点执行
at 5pm tomorrow
at> date > /mydate.txt
一分钟后
at now + 1 minutes
at> date > /date1
9、Linux分区
lsblk / lsblk -f
:查看所有设备挂载情况。
df -h
:整体磁盘使用情况。
du -h 目录
:查询指定目录的磁盘占用情况。
磁盘实用指令:
统计文件夹下文件的个数
ls -l | grep "^-" | wc -l
|
正则表达式匹配以
-
开头的文件统计文件夹下目录的个数
ls -l | grep "^d" | wc -l
|
正则表达式匹配以d
开头的文件
统计文件夹下文件的个数,包括子文件夹下的
ls -lR | grep "^-" | wc -l
统计文件夹下目录的个数,包括子文件夹下的
ls -lR | grep "^d" | wc -l
以树状显示目录结构
tree 目录
如果没有tree,则使用
yum install tree
安装。
10、网络配置
查看网络配置:ifconfig
10.1、重新配置ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改BOOTPROTO=”static”
IPADDR=192.168.138.128
GATEWAY=192.168.200.2
DNS1=192.168.200.2
10.2、设置主机名
hostname
:查看主机名
vim /etc/hostname
:进入修改主机名
修改之后,必须重启才能生效。
10.3、设置hosts映射
Windows 上:进入 C:/Windows/System32/drivers/etc/hosts ,添加ip地址和映射名。
Linux 上:进入 /etc/hosts ,添加ip地址和映射名。
11、进程管理
在Linux中,每一个执行的程序就是一个进程。
11.1、ps
ps
:可以查看当前系统中有哪些进程在执行,以及它们的执行状况。
进程信息说明:
ps -ef
:以全格式显示当前所有进程。
信息说明:
11.2、kill & killall
kill [选项] 进程号
:终止进程;
killall 进程名称
:在系统因负载过大而变得很慢时很有作用。
-9:强迫立即停止
11.3、pstree
更直观地查看进程信息。
-p :显示进程pid
-u :显示进程所属用户
11.4、服务
服务service本质就是进程,运行在后台,会监听某个端口,等待其他程序的请求,比如3306、22。因此我们又称之为守护进程。
service 服务名 [start | stop | restart | reload | status]
:
- 启动、停止、重启、重新加载、查询状态
service 指令管理的服务可以在 /etc/init.d
中查看
服务的运行级别:
chkconfig
命令:查看服务在各个运行级别的设置
chkconfig --list | grep "xxx"
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off
:设置该服务在具体运行级别的开和关
systemctl
指令:设置服务的自启动状态
systemctl list-unit-files | grep 服务名:查询服务自启动状态
systemctl enable 服务名:设置服务开机自启动,永久生效,需要临时生效则使用
start
systemctl disable 服务名:关闭服务开机启动,永久生效,需要临时生效则使用
stop
systemctl is-enabled 服务名:查询某个服务是否开机自启动
systemctl status 服务名
11.5、firewall
打开和关闭指定端口:
永久开放端口:firewall-cmd –add-port=端口号/协议 –permanent
永久关闭端口:firewall-cmd -remove-port=端口号/协议 –permanent
重新加载防火墙:firewall-cmd –reload
查看已经开放的端口:firewall-cmd –list-all
查看指定端口是否开放:firewall-cmd –query-port=端口号/协议
11.6、netstat
监控网络状态:
netstat [选项]
- -an:按一定的顺序排列输出
- -p:显示哪个进程在调用
netstate -anp | more
:
12、rpm & yum
Linux rpm 命令用于管理套件。
rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
简单查询指令:
rpm -qa | grep "xxx"
rpm -qi “xxx”:
rpm -ql “xxx”:查询软件包中的文件
rpm -qf “xxx”:文件所属的安装包
**rpm -e “xxx”**:删除软件包
- –nodeps:强制删除
rpm -ivh rpm包全路径名称
:
- -i:安装
- -v:提示
- -h:进度条
yum:基于rpm包,自动处理依赖关系,并且一次安装所有依赖的软件包。
yum list
:软件列表
yum install xxx
:安装软件
13、shell编程
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求(调用操作系统内核)以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
13.1、快速入门
脚本格式:
脚本以
#!/bin/bash
开头脚本需要有可执行权限 x
脚本执行方式:
方式 1(输入脚本的绝对路径或相对路径):
- 说明:首先要赋予
helloworld.sh
脚本的 + x 权限, - 再执行脚本比如
./hello.sh
或者使用绝对路径/root/shcode/hello.sh
。
方式 2(sh+脚本):
- 说明:不用赋予脚本 + x 权限,直接执行即可。比如
sh hello.sh
,也可以使用绝对路径。
方式 3(source
+ 脚本).
方式 4(.
+ 脚本).
13.2、变量
Linux Shell 中的变量分为,系统变量和用户自定义变量。
系统变量:
$HOME、$PWD、$SHELL、$USER
等等,比如:echo $HOME
等等..显示当前 shell 中所有变量:set
- 定义变量:变量名=值
- 撤销变量:
unset 变量
- 声明静态变量:
readonly 变量
,注意:不能 unset
定义变量的规则:
变量名称可以由字母、数字和下划线组成,但是不能以数字开头
等号两侧不能有空格
变量名称一般习惯为大写
将命令的返回值赋给变量:
1 |
|
注释::<<! 内容 !
注意:内容和注释符都应该另起一行。
查看环境变量:
env
printenv HOME
echo $HOME
设置环境变量:
export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量/全局变量)
source 配置文件 (功能描述:让修改后的配置信息立即生效)
echo $变量名 (功能描述:查询环境变量的值)
位置参数变量:
当执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
$n (功能描述:n 为数字,$0
代表命令本身,$1
-$9
代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
)
$* (功能描述:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
预定义变量:
可以直接在 shell 脚本中使用的,事先已经定义好的变量。
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
了解即可。
运算符:
“
$((运算式))
”或“$[运算式]
”或者 expr m + n注意 expr 运算符间要有空格, 如果希望将 expr 的结果赋给某个变量,使用 ``
expr m - n
expr \*, /, % 乘,除,取余
条件判断:
[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false)
应用实例
[ hspEdu ] 返回 true [ ] 返回 false
[ condition ] && echo OK || echo not ok 条件满足,执行后面的语句
判断语句
常用判断条件
- = 字符串比较 2. 两个整数的比较
-lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于
按照文件权限进行判断
-r 有读的权限 -w 有写的权限 -x 有执行的权限
按照文件类型进行判断
-f 文件存在并且是一个常规的文件 -e 文件存在
-d 文件存在并是一个目录
应用实例
案例 1:”ok”是否等于”ok” 判断语句:使用 =
案例 2:23 是否大于等于 22 判断语句:使用 -ge
案例 3:/root/shcode/aaa.txt 目录中的文件是否存在判断语句: 使用 -f
1 |
|
if 判断
1
2
3
4
5if [ 条件判断式 ]
then
代码
fi
或者 , 多分支1
2
3
4
5
6
7if [ 条件判断式 ]
then
代码
elif [条件判断式]
then
代码
fi注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格。
case 语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22case $变量名 in "值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esacfor 循环
1
2
3
4for 变量 in 值 1 值 2 值 3…
do
程序/代码
done1
2
3
4for (( 初始值;循环控制条件;变量变化 ))
do
程序/代码
donewhile 循环
1
2
3
4while [ 条件判断式 ]
do
程序 /代码
done注意:while 和 [有空格,条件判断式和 [也有空格
read (选项) (参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。
参数:指定读取值的变量名
案例 1:读取控制台输入一个 NUM1 值
1
2
3#!/bin/bash
read -p "请输入一个数 NUM1=" NUM1
echo "你输入的 NUM1=$NUM1"案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。
1
2
3#!/bin/bash
read -t 10 -p "请输入NUM2=" NUM2
echo NUM2=$NUM2
13.3、函数
系统函数:
basename
基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
(功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。)
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
案例 1:请返回 /home/aaa/test.txt 的 “test.txt” 部分
basename /home/aaa/test.txt
dirname
基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径
(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
应用实例
案例 1:请返回 /home/aaa/test.txt 的 /home/aaa dirname /home/aaa/test.txt
自定义函数:
1 |
|
奇怪的语法:…
1 |
|
14、磁盘管理
查看目录占据空间大小:
1 |
|
查看不同层次目录占据空间大小:
1 |
|
查看磁盘空间使用情况:
1 |
|
1 |
|