Linux常用命令

一、Linux常用命令

1.文件处理命令

1.1命令格式与目录处理命令ls

(1)命令格式:命令 [-选项] 参数
(2)例子:ls -al /etc
(3)个别命令使用不遵守此格式,当有多个选项的时候,可以把选项写在一起,-a 可以写成-all
(4)英文原意:list
(5)命令所在路径:/bin/ls
在这里插入图片描述
(6)长格式显示:ls -l
(7)drwxr-xr-x:d表示document表示目录,l表示软链接,r表示读,w是写,x是执行;root root ,前一个root表示所有者,后一个root表示所属组;后面的4096表示文件的大小。
-rw-r–r-- :文件类型有两种,分别是d和l,d表示目录,l表示软链接。然后ugo,u是所有者,g是所属组,o是其他人,r表示读权限,w表示写权限,x表示执行权限。
(8)显示目录信息:ls -ald /etc

1.2目录处理命令

(1)创建新目录命令:mkdir,英文原意是make directories,命令所在目录是/bin/mkdir。递归创建目录:mkdir -p [目录名]。案例mkdir -p /tmp/japan/dubbo
(2)切换目录命令:cd,英文原意是change directory,该命令是shell内置命令,所有用户都能执行。切换目录:cd /tmp/japan/dubbo 切换到指定的目录;cd …回到上一级目录。
(3)显示当前目录命令:pwd,英文原意是print working directory,该命令所在路径是/bin/pwd,所有用户都能执行
(4)删除空目录命令:rmdir,英文原意是remove empty directories,命令所在路径是/bin/rmdir,语法是rmdir [目录名]。
(5)复制命令:cp,英文原意是copy,命令所在路径是/bin/cp,cp -rp [原文件目录] [目标文件目录],-r表示复制目录,-p表示保留文件属性。 复制文件:cp -r /tmp/yddaemon.log /tmp/japan;
(6)剪切、改名文件:mv,英文原意是move,命令所在路径是/bin/mv,语法是:mv [原文件或目录] [目标目录] 。案例:将a目录剪切到/tmp目录
在这里插入图片描述
(7)删除文件或目录:rm,英文原意remove,命令英文原意remove。语法:rm -rf [文件或目录],-r删除目录,-f强制执行。

1.3文件处理命令

(1)创建空文件命令:touch,命令所在路径是/bin/touch,所有用户都能执行,语法是touch [文件名]。
(2)显示文件内容命令:cat,命令所在路径/bin/cat,所有用户都有执行权限,-n显示行号,比如cat /etc/issue,cat -n /etc/services
(3)分页显示文件内容命令:more,命令所在路径/bin/more,语法是more [文件名] ,空格或f表示翻页,enter表示换行,q或者Q表示推出,按空格翻页,回车换行,按pageUp一页一页向上翻,pageDown一页一页向下翻,按上箭头一行一行向上翻。
(4)分页显示文件内容命令:less,可以向上翻页,命令所在路径/usr/bin/less,语法是less [文件名],按空格翻页,回车换行,按pageUp一页一页向上翻,pageDown一页一页向下翻,按上箭头一行一行向上翻。在less的浏览页面里面可以输入一个/和关键词,如下:
在这里插入图片描述
(5)显示文件前几行head命令,-n指定行数,命令所在目录是/usr/bin/head,执行语法是head [文件名],直接使用head 文件名,默认显示文件的前10行。如head -n 2 a.txt
在这里插入图片描述
(6)显示文件后几行tail命令,-n指定行数,命令所在目录是/usr/bin/tail,执行语法是tail [文件名],直接使用tail 文件名,默认显示文件的后10行。如tail -n 20 a.txt。
在这里插入图片描述
tail -f [文件名]可以动态希纳是文件,比如想看一个日志文件动态变化,就可以使用这个。举例:使用tail -f a.txt监控文件,
在这里插入图片描述
然后再另外开一个窗口,向文件里追加内容
echo 白日依山尽,黄河入海流 >> a.txt
在这里插入图片描述
再查看文件内容是否追加成功
在这里插入图片描述

1.4链接命令

(1)生成链接文件命令ln,命令英文原意是link,语法是ln -s [原文件] [目标文件],-s表示创建软链接,命令所在路径是/bin/ln,例如创建软连接:ln -s /etc/issue /software/issue.soft
在这里插入图片描述
创建硬链接:ln a.txt c.sh
在这里插入图片描述
软链接和强链接的区别:
在这里插入图片描述
软链接前面的链接类型是l,ugo三类用户的权限是rwx,软链接箭头指向源文件,运行软连接文件的时候,还是会找到源文件去执行,作用和windows的作用是一样的,最后真正执行的时候是源文件,源文件的权限决定执行的结果。
软连接的特点:(1)类似windows的快捷方式,软件的权限全部都是lrwxrwxrwx,即软链接的权限都是rwxrwxrwx;(2)文件大小只是符号链接;(3)b.sh->a.txt,箭头指向源文件。

1.5pwd指令

(1)介绍:pwd指令主要显示当前工作目录的绝对路径
在这里插入图片描述

1.6 >指令和>>指令

(1)>表示输出重定向,会将原来的文件内容覆盖;>>追加,不会覆盖原来文件的内容,只是在文件末尾追加。
(2)基本语法:
ls -l >a.txt (功能描述:列表的内容写入文件a.txt中,覆盖写)
ls -al>>文件 (功能描述:列表的内容追加写到a.txt末尾)
cat 文件1 >文件2 (功能描述:将文件1的内容覆盖到文件2)
echo 文件内容 > 文件3

(3)应用实例
案例1:将/home目录下面的文件列表追加写到/software/a.txt中
在这里插入图片描述

案例2:将当前日历信息追加到/software/b.txt中
在这里插入图片描述

1.7echo指令

(1)echo指令输出内容到控制台。基本语法echo [选项] [输出内容]
(2)应用实例
案例1:使用echo 指令输出环境变量,输出当前的环境路径

echo $PATH

在这里插入图片描述
案例2:使用echo指令输出hello world
在这里插入图片描述

1.8时间日期类

(1)date指令,主要用于显示当前日期的。date +%Y,显示当前年份;date +%m显示当前月份;date +%d显示的当前是哪一天。
date +“%Y-%m-%d %H:%M:%S”
在这里插入图片描述

2.vi和vim编辑器

2.1vi和vim编辑器基本介绍

所有的Linux系统都会内建vi文本编辑器。Vim具有程序编辑的能力,可以看作是Vi的增强版,可以主动的以字体颜色辨别语法的正确性,方便程序设计,代码补充、编译以及错误跳转等方便编写程序的功能特别丰富,在程序员中广泛使用。

2.2vi和vim的三种常见模式

(1)正常模式:vim打开一个档案就直接进入一般模式了。在这个模式中可以使用上下左右来移动光标,可以使用删除字符或者整行删除来处理档案内容,也可以使用复制、粘贴来处理文件数据。

(2)插入模式:按下i、I、o、O、A、a、r、R等任意一个字母之后就会进入到编辑模式,一般来说按i即可。

(3)命令行模式:在这个模式当中,可以提供你相关的指令,完成读取、存盘、替换、离开vim、显示行号等动作。
(4)vi和vim模式的相互切换
在这里插入图片描述

2.3 vi和vim的快捷键

(1)拷贝当前行yy,拷贝当前行向下的5行5yy。
(2)粘贴命令是pp,或者p。
(3)删除当前行dd,删除当前行向下的5行5dd。
(4)在文件中查找某个单词(命令行下/关键字),回车查找,输入n就是查找下一个。先输入一个斜杠然后回车。
在这里插入图片描述
(5)设置文件的行号set nu,取消文件的行号set nonu。
在这里插入图片描述

(6)编辑/etc/profile文件,使用快捷键到文档的最末行G,到最首行gg。

(7)在一个文件中输入hello,然后又撤销这个动作 u

(8)编辑/etc/profile文件,并将光标移动到20行,shift+g。
第一步显示行号:set nu
第二步:输入20这个数
第三步:输入shift+g
在这里插入图片描述

2.4入门案例

使用vim开发一个Hello.java程序,保存步骤和演示:
在这里插入图片描述
代码具体内容如下:
在这里插入图片描述

3.开机、重启和用户登录注销

3.1关机 & 重启命令

(1)shutdown -h now 立刻进行关机
(2)shutdown -h 1 “hello,1分钟后会关机了”
(3)shutdown -r now 现在重新启动计算机
(4)halt 关机,作用和上面一样
(5)reboot 现在重新启动计算机
(6)sync 把内存数据同步到磁盘,不管是重启系统还是关闭系统,首先都是要运行sync命令,把内存里面的数据写到磁盘里面,防止数据丢失。

3.2用户的登录和注销

(1)基本介绍:登录的时候尽量减少root账户的登录,因为它是系统管理员,最大的权限,避免操作失误,可以利用普通用户登录,登录后再用su -用户名来切换成系统管理员的身份。
(2)在提示符下输入logout即可注销用户。

4.用户管理

4.1基本介绍

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先想系统管理员申请一个账号,然后以这个账号的身份进入系统。

4.2添加用户

(1)基本语法:useradd 用户名
(2)应用案例:添加一个用户xiaoming。useradd xiaoming。当创建用户成功后,会自动创建和用户同名的家目录。也可以通过usreadd -d 指定目录 新的用户名,给新创建的用户指定家目录。
在这里插入图片描述
(3)修改用户密码:passwd xiaoming
在这里插入图片描述

4.3删除指定用户

(1)基本语法:userdel 用户名
(2)应用案例:删除用户xiaoming,但是要保留家目录;
在这里插入图片描述

删除用户以及用户主目录
在这里插入图片描述

5.查询用户信息

(1)基本语法:id 用户名
(2)应用案例:请查询root信息,当用户不存在时,返回无此用户。如下图查询root用户,root用户id是0,用户所在组的id也是0,它属于root组。
在这里插入图片描述
先新增一个用户useradd lisi,然后id lisi
在这里插入图片描述

6.用户切换

6.1介绍

在操作linux中,如果当前用户的权限不够,可以通过su -指令切换到高权限用户,比如root用户。

6.2基本语法

(1)su -用户

6.2应用实例

(1)创建一个用户zf,指定密码,然后切换到zf。从权限高的用户切换到权限低的用户的时候,不需要输入密码,但是从用户权限低的切换到用户权限高的用户就需要输入密码;当需要返回到原来用户的时候,使用exit命令。
在这里插入图片描述

7.查看当前用户/登录用户

7.1基本语法

whoami/ who am i

7.2用户组

类似于角色,系统可以对有共性的多个用户进行统一管理

新增组

(1)指令是groupadd 组名
在这里插入图片描述

(2)案例

7.3删除组

(1)删除组语法:groupdel 组名
(2)案例演示:
在这里插入图片描述

7.4增加用户的时候直接架上组

(1)指令:useradd -g 用户组 用户名

groupadd shaolin
useradd -g shaolin wukong

在这里插入图片描述
linjuemin的id是1002,用户名是linjuemin,属于1002这个组的,组名叫kongdongpai,
在这里插入图片描述

7.5修改用户组

(1)基本语法:usermod -g 用户组 用户名
(2)案例演示:创建一个shaolin组,将zhangwuji修改到shaolin组
在这里插入图片描述

7.6用户和组相关的文件

(1)/etc/passwd文件。用户(user)的配置文件,记录用户的各种信息。每行含义:用户名:口令:用户标识号:组织标识号:注释性描述:主目录:登录shell
在这里插入图片描述
在这里插入图片描述

(2)/etc/shadow文件是一个口令配置文件,每行的含义,登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
在这里插入图片描述
(3)/etc/group文件,组配置文件,记录Linux包含的组信息。每行含义,组名:口令:组标识号:组内用户列表
在这里插入图片描述

8.实用指令

8.1指定运行级别

系统的运行级别配置文件:/etc/inittab。常用的运行级别是3和5,要修改默认的运行级别可以修改文件/etc/inittab的id:5:initdefault:这一行的数字。命令:init [012356]
0:关机
1:单用户(找回丢失密码)
2:多用户无网络服务
3:多用户有网络服务
4:保留
5:图形界面
6:重启
在这里插入图片描述
问题:假设我们的root密码忘记了,请问如何找回?
思路:进入到单用户模式,然后修改root密码即可。因为进入到单用户模式,root不需要密码就可以登录。

8.2帮助指令

(1)man获取帮助信息。基本用法是man [命令或配置文件],应用实例:查看ls命令的帮助信息:man ls
在这里插入图片描述
(2)help指令。基本语法是help 命令,应用实例,查看cd命令的帮助信息:man cd
在这里插入图片描述

9.搜索查找类

9.1find指令

find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法: find [搜索范围] [选项]
选项说明

选项功能
-name<查询方式>按照指定的文件名查找模式查找字段
-user<用户名>查找属于指定用户的所有文件
-size<文件大小>按照指定文件大小查找文件
(1)案例1:按照文件名,根据名称查找/home目录下面的hello.txt文件
在这里插入图片描述

(2)案例2:按照拥有者,查找/opt目录下,用户名为nobady的文件
在这里插入图片描述
(3)案例3:查找整个linux系统下文件大小超过2g的文件。(+n大于,-n小于,n等于)
在这里插入图片描述
查询根目录下所有的.txt文件
在这里插入图片描述

9.2locate指令

(1)locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名以及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度很快。
(2)基本语法:locate 搜索文件。由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate指令数据库。应用实例:
(3)案例1:使用locate指令快速定位hello.txt文件所在目录
在这里插入图片描述

9.3 grep指令和管道符号

(1)grep过滤查找,管道符号"|" ,表示将前一个命令的处理结果传递到后面的命令处理。基本语法:

grep [选项] 查找内容 源文件
选项功能
-n显示匹配行以及行号
-i忽略字母大小
(2)实例应用1:请在hello.txt文件中,查找Yes所在的行,并且显示行号

在这里插入图片描述

10.压缩和解压缩

10.1gzip/gunzip指令。gzip用于压缩文件,gunzip用于解压缩的。基本语法:

(1)gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件),当我们使用gzip对文件压缩之后,不会保留原来的文件。
(2)gunzip文件 .gz (功能描述:解压缩文件命令)

案例1:gzip压缩,将/home下面的hello.txt文件进行压缩

案例2:gunzip压缩,将/home下面的hello.txt.gz文件进行压缩
在这里插入图片描述

10.2zip和unzip指令

(1)zip用于压缩文件,unzip用于解压缩的,这个在项目打包发布的时候比较有用。
(2)基本语法:
zip [选项] XXX.zip 将要压缩的内容
unzip [选项] XXX.zip 解压缩文件
zip常用选项:
-r:递归压缩,即压缩目录

(3)unzip的常用选项
-d<目录>:指定解压后,文件的存放目录

(4)案例1:将/home下的所有文件压缩成mypackage.zip
在这里插入图片描述

案例2:将mypackage.zip解压到/opt/tmp目录下

10.3 tar指令

(1)tar指令是打包指令,最后打包后的文件是.tar.gz的文件。
(2)基本语法:
tar [选项] XXX.tar.gz 打包内容。功能描述:打包目录,压缩后的文件格式。

选项功能
-c产生.tar打包文件
-v显示详细信息
-f指定压缩后的文件名
-z打包同时压缩
-x解包.tar文件

(3)应用实例
案例1:压缩多个文件,将/home/hello.txt和/home/a.txt压缩成a.tar.gz

tar -zcvf a.tar.gz a.txt hello.txt

在这里插入图片描述

案例2:将/home文件夹压缩成myhome.tar.gz

 tar -zcvf myhome.tar.gz /home/

在这里插入图片描述
案例3:将a.tar.gz压缩到当前目录

tar -xzvf myhome.tar.gz

在这里插入图片描述

二、实操篇

1、组管理和权限管理

1.1Linux组成基本介绍

在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其他组的概念。一般文件的创建者,谁创建了这个文件,谁就是这个文件的所有者。

(1)查看文件的所有者
指令:ls -alh
在这里插入图片描述

2.权限的基本介绍

2.1 权限介绍

在这里插入图片描述
(1)0-9位说明:
1)第0位确定文件的类型(d、-、l、c、b)
2)第1-3位确定所有者(该文件的所有者)拥有该文件的权限。-User
3)第4-6位确定所属组(同用户组的)拥有该文件的权限。-Group
4)第7-9位确定其他用户拥有该文件的权限。-Other
在这里插入图片描述

2.3 rwx权限详解,R=4,W=2,X=1

2.3.1rwx作用到文件

(1)r代表可读,可以查看;
(2)w代表可写,可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件;
(3)x代表可以执行。

2.3.2rwx作用到目录

(1)r代表可读,ls可以查看目录内容
(2)w代表可写,可以修改,可以在目录内创建、删除、重命名目录
(3)x代表可以执行,代表可以进入该目录

2.4修改权限

(1)基本说明:通过chmod指令,可以修改文件或者目录的权限

2.4.1通过 +、-、=来改变目录权限

u:代表所有者、g代表所有组、o代表其他人、a所有人(u、g、o的总和)
(1)chmod u=rwx,g=rx,o=x 文件目录名 (意思是将文件目录所有者设置为可读写执行权限,同用户组的用户有读和执行权限,其他用户组的用户可以执行)
(2)chmod o+w 文件目录名 (意思是其他用户组对该文件目录都可写)
(3)chmod a-x 文件目录名 (意思是ugo都去掉执行权限)

2.4.2 通过数字改变权限

r=4,w=2,x=1,rwx=4+2+1
chmod u=rwx,g=rx,o=x,相当于chmod 751 文件目录名

2.5 修改文件的所有者 chown

2.5.1基本介绍

(1)chown newowner file 改变文件的所有者
(2)chown newowner:newgroup 改变用户的所有者和所有组
(3)-R:如果是目录,则使其下的所有子文件或目录递归的生效,递归改动

2.5.2案例演示

(1)请将/home/abc.txt文件的所有者修改成tom
在这里插入图片描述

(2)请将/home/kkk目录下面的所有的文件和目录的所有者都改成mark
在这里插入图片描述
(3)警察和土匪的游戏
group:police,bandit
警察:jack,jerry
土匪:xq,xh
创建组
创建用户:警察
在这里插入图片描述
创建用户强盗:
在这里插入图片描述
jack创建一个文件,自己可以读写,本组人可读,其他组的没人有任何权限
在这里插入图片描述
jack修改该文件,让其他组的人可以读,本组人也可以读
在这里插入图片描述
xh投靠警察,看看是否可以读写

3.任务调度

3.1任务调度介绍

crontab 进行定时任务设置
(1)概述:任务调度是指系统在某个时间执行的特定的命令或者程序。
任务调度分类:系统工作:有些共奏必须周而复始的执行,如病毒扫描;个别用户工作:个别用户系统执行某些程序,比如对mysql数据库的备份。
(2)基本语法:crontab [选项]
crontab -e 编辑crontab定时任务
crontab -l 查询crontab定时任务
crontab -r 删除当前所有的定时任务

设置调度任务文件:/etc/crontab

设置个人任务调度。执行crontab -e命令

接着输入任务到调度文件,如8/1****ls -l /etc/>/tmp/to.txt

意思是每小时的每分钟执行 ls -l /etc/>/tmp/to.txt

占位符含义

项目含义范围
第一个*一小时中的第几分钟0-59
第二个*一天中的第几小时0-23
第三个*一个月中的第几天1-31
第四个*一年中地几个月1-12
第五个*一周中的星期几0-7,0和7都代表周日

3.2案例

案例1:每个1分钟,就将当前日期信息,追加到/tmp/mydata文件中。
解答:
1)先写一个文件 、tmp/mytask.sh

date >> /tmp/to.txt

在这里插入图片描述

2)给mytask.sh加一个可执行权限
在这里插入图片描述

3)配置调度任务:

crontab -e
* * * * * /tmp/mytask.sh 

在这里插入图片描述

三、Shell编程

1.Shell编程快速入门

1.1脚本要求

(1)脚本以#!bin/bash开头
(2)脚本要有可执行权限
(3)脚本执行常用的方式:
1)首先赋予helloworld.sh脚本的执行权限,然后执行脚本
2)直接执行脚本:sh+脚本。不用赋予脚本x权限,直接执行即可

1.2案例

案例1:
创建一个Shell脚本,输出Hello world。
在这里插入图片描述
给权限
在这里插入图片描述

2.Shell的变量

2.1Linux的shell变量分为系统变量和用户自定义变量

(1)Linux Shell中的变量分为系统变量和用户自定义变量;系统变量比如$HOME、$PWD、$SHELL、$USER 。显示当前shell中的所有变量:set
在这里插入图片描述
(2)shell变量的定义
1)定义变量:变量=值
2)撤销变量:unset 变量
3)声明静态变量:readonly变量,注意不能unset
4)变量名称可以有字母、数字和下划线组成,但是不能以数字开头
5)等号两边不能有空格
6)变量名称一般习惯大写
7)将命令的返回值复制给变量的时候,A=ls -la``反引号,运行里面的命令,并把结果返回给变量A; A=$(ls -la)等价于反引号。
在这里插入图片描述

静态变量不能unset
在这里插入图片描述
案例
在这里插入图片描述

2.2设置环境变量

2.2.1基本语法

1)export 变量名 = 变量值 (功能描述:将shell变量输出为环境变量)
2)source 配置文件 (功能描述:让修改后的配置信息立即生效)
3)echo $变量名 (功能描述:查询环境变量的值)

2.2.2 快速入门

1)在/etc/profile文件中定义TOMCAT_HOME环境变量
2)查看环境变量TOMCAT_HOME的值
3)在另一个shell程序中使用TOMCAT_HOME变量

2.3位置参数变量

2.3.1 位置参数变量介绍

(1)当我们执行一个shell脚本的时候,如果希望获取到命令行的参数信息的时候,就可以使用到位置参数变量。比如./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。
(2)基本语法:
1)$n:n为数字,$0代表命令本身,$1到$9代表第一到第9个参数,10以上的参数需要用大括号包含,如${10}
2)$*:代表命令行中所有的参数,$*把所有的参数看作一个整体
3)$@:代表命令行中所有的参数,不过$@把每个参数区分对待
4)$#这个变量代表命令行中所有参数的个数

(3)应用实例
案例:编写一个shell脚本positionPara.sh,在脚本中获取到命令行各个参数信息
脚本:
在这里插入图片描述
跑脚本的结果
在这里插入图片描述

2.4预定义变量

2.4.1基本介绍

就是shell设计者实现设计好的变量,可以直接在shell脚本中使用

2.4.2基本语法

$$:当前进程的进程号PID
$!:后台运行的最后一个进程的进程号
#?:最后一次执行的命令的返回状态。如果这个值为0,证明上一个命令正确执行,如果这个变量的值为非0,则证明上一次执行不正确。

2.4.3应用实例

在一个shell脚本中简单使用一下定义变量
在这里插入图片描述

2.5 运算符

2.5.1基本介绍

学习如何在shell中使用各种运算操作

2.5.2基本语法

(1)"$((运算式))"或"$[运算式]"
(2)expr m + n,注意expr运算符之间要有空格
(3)expr m - n
(4)expr *,/,%,乘,除,取余

2.5.3应用实例

(1)计算(2+3)x4的值
第一种计算方式:使用$(())的方式进行计算

#!/bin/bash
# 第一种方式  
RESULT1=$(((2+3)*4))
echo "计算结果为:$RESULT1"

第二种计算方式:使用$[运算式]的方式得到结果

RESULT2=$[(2+3)*4]
echo "计算结果为:$RESULT2"

(2)计算出命令行的两个参数的和
脚本

RESULT3=$[$1+$2]
echo "结果为:$RESULT3"

脚本调用:./test1.sh 10 20

2.6 条件判断

2.6.1基本语法
[ condition ] (注意condition前后要有空格)  #非空返回true,可以使用$?验证(0为true,>1为false)

1)两个整数比较:
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

2)按照文件进行判断
-r 有读权限
-w 有写权限
-x 有执行权限

3)按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并且是一个目录
4)应用实例
案例1:判断"ok"是否等于"ok",判断语句:
#!/bin/bash
if [ "ok" = "ok" ]
then
        echo "equals"
fi


案例2:判断23是否大于等于22
#!/bin/bash
if [ 23 -gt 22 ]
then
        echo "大于"
fi


案例3:/root/install.log目录的b.txt文件是否存在
#!/bin/bash
if [ -e /tmp/b.txt ]
then
        echo "存在"
fi

2.7 流程控制

2.7.1if判断
if [条件判断式];
then
	程序
fi

或者

if[条件判断试];
then
	程序
elif[条件判断式]
then
	程序
fi

注意:[ 条件判断式 ],中括号和条件判断之间必须有空格;推荐使用第二种方式
在这里插入图片描述

2.7.2应用实例

案例:请编写一个shell程序,如果输入的参数大于等于60,请输出及格了,如果小于等于60,请输出不及格

#!/bin/bash
if [ $1 -ge 60 ]
then 
        echo "及格了"
elif [ $1 -lt 60 ]
then 
        echo "不及格"
fi

2.7.3case语句
case $变量名 in
	值1)
	如果变量的值等于值1,则执行程序1
	;;
	值2)
	如果变量的值等于值2,则执行程序2
	;;
	值3)
	如果变量的值等于值3,则执行程序3
	...省略其他分支...
	*)
	如果变量的值都不是以上的值,则执行此程序
	;;
	esac;
2.7.4应用实例

案例1:当命令行的参数是1的时候,输出周一,是2的时候输出周二,其他情况输出other

#!/bin/bash
case $1 in
    "1")
        echo "周一"
    ;;
    "2")
        echo "周二"
    ;;
    "3")
        echo "周三"
    ;;
    "4")
        echo "周四"
    ;;
    "5")
        echo "周五"
    ;;
    "6")
        echo "周六"
    ;;
    "7")
        echo "周天"
    ;;
    *)
        echo "other"
    ;;
    esac;
    ;;
    "2")
        echo "周二"
    ;;
    "3")
        echo "周三"
    ;;
    "4")
        echo "周四"
    ;;
    "5")
        echo "周五"
    ;;
    "6")
        echo "周六"
    ;;
    "7")
        echo "周天"
    ;;
    *)
        echo "other"
    ;;
    esac;

2.7.5 for循环

基本语法1

for 变量 in 值1 值2 值3.。。
	do
		程序
	done

案例1:打印命令行输入参数

#!/bin/bash
## 使用$*来写,把$*的值传给i,然后用$i来打印出来
for i in "$*"
do
        echo "the num is $i"
done
"=========================================================="
for j in "$@"
do
        echo "the num is $j"
done

得到结果为
[root@centos131 tmp]# ./test7.sh  1 2 34 4
the num is 1 2 34 4
./test7.sh:行7: ==========================================================: 未找到命令
the num is 1
the num is 2
the num is 34
the num is 4

基本语法2

for((初始值;循环控制条件;变量变化))
do 
	程序
done

案例1:从1加到100的值,输出显示

#!/bin/bash
# 计算从1+2+3+...+100的值
#定义一个结果变量
SUM=0
for((i=1;i<=$1;i++))
do
 SUM=$[$SUM+$i]
done
echo "从1加到$1的结果为:$SUM"

2.7.6while循环

(1)基本语法

while[ 条件判断式 ]
do
	程序
	done 

(2)应用案例:从命令行输入一个n,计算从1到n的总和

#!/bin/bash
SUM=0
i=1
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "计算结果为$SUM"

执行结果为:

[root@centos131 tmp]# ./test9.sh 100
计算结果为5050

2.7.7read读取控制台输入

(1)基本语法

read (选项)(参数)
-p:指定读取时的提示符
-t:指定读取值时的等待时间(),如果没有在指定时间内输入,就不再等待了。
变量:指定读取值得变量名

(2)应用实例
案例1:读取控制台输入得一个num值

#!/bin/bash
SUM=0
i=1
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "计算结果为$SUM"

2.8shell函数

(1)shell里面有两种函数,一种是系统函数,另外一种是自定义函数

2.8.1系统函数:basename

(1)basename基本语法:返回完整路径最后/得部分,用于获取文件名。basename命令会删除所有得前缀包括最后一个/字符,然后将字符串显示出来。

basename [pathname][suffix]
basename [string][suffix]

(2)应用实例
案例1:返回/tmp/test1.sh的test1.sh部分

[root@centos131 tmp]# basename /tmp/test1.sh
test1.sh
2.8.2系统函数dirname

(1)dirname主要用于返回完整路径最后/的前面部分,常用于返回路径部分。
(2)案例2:请返回/tmp/aaa/test1.txt的/tmp/aaa

[root@centos131 tmcat]# dirname /tmp/tmcat/test1.txt 
/tmp/tmcat

2.9 自定义函数

(1)基本语法,直接写函数名:funname [值]

[function]funname[()]
{
	Action;
	[return int;]
}

(2)应用实例
案例1:计算输入的两个参数的和

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值