Linux基础命令

Linux的目录结构

image-20240514213712464

  • /,根目录是最顶级的目录了
  • Linux只有一个顶级目录:/
  • 路径描述的层次关系同样适用/来表示
  • /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt

ls命令

功能:列出文件夹信息

语法:ls [-l -h -a] [参数]

  • 参数:被查看的文件夹,不提供参数,表示查看当前工作目录
  • -l,以列表形式查看
  • -h,配合-l,以更加人性化的方式显示文件大小
  • -a,显示隐藏文件

隐藏文件、文件夹

在Linux中以.开头的,均是隐藏的。

默认不显示出来,需要-a选项才可查看到。

pwd命令

功能:展示当前工作目录

语法:pwd

作用是:输出当前所在的工作目录

cd命令

功能:切换工作目录

语法:cd [目标目录]

参数:目标目录,要切换去的地方,不提供默认切换到当前登录用户HOME目录

HOME目录

每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录。

  • 普通用户的HOME目录,默认在:/home/用户名

  • root用户的HOME目录,在:/root

FinalShell登陆终端后,默认的工作目录就是用户的HOME目录

相对路径、绝对路径

  • 相对路径,==非==/开头的称之为相对路径

    相对路径表示以当前目录作为起点,去描述路径,如test/a.txt,表示当前工作目录内的test文件夹内的a.txt文件

  • 绝对路径,==以==/开头的称之为绝对路径

    绝对路径从根开始描述路径

特殊路径符

  • .,表示当前,比如./a.txt,表示当前文件夹内的a.txt文件
  • ..,表示上级目录,比如../表示上级目录,../../表示上级的上级目录
  • ~,表示用户的HOME目录,比如cd ~,即可切回用户HOME目录

mkdir命令

功能:创建文件夹

语法:mkdir [-p] 参数

  • 参数:被创建文件夹的路径
  • 选项:-p,可选,表示创建前置路径
    • 自动创建不存在的父目录,适用于创建连续多层级的目录

touch命令

功能:创建文件

语法:touch 参数

  • 参数:参数必填,表示要创建的文件路径

cat命令

功能:查看文件内容

语法:cat 参数

  • 参数:被查看的文件路径

more命令

功能:查看文件,可以支持翻页查看

语法:more 参数

  • 参数:被查看的文件路径
  • 在查看过程中:
    • 空格键翻页
    • q退出查看

cp命令

功能:复制文件、文件夹

语法:cp [-r] 参数1 参数2

  • 参数1,被复制的
  • 参数2,要复制去的地方
  • 选项:-r,可选,复制文件夹使用

示例:

  • cp a.txt b.txt,复制当前目录下a.txt为b.txt
  • cp a.txt test/,复制当前目录a.txt到test文件夹内
  • cp -r test test2,复制文件夹test到当前文件夹内为test2存在

mv命令

功能:移动文件、文件夹

语法:mv 参数1 参数2

  • 参数1:被移动的
  • 参数2:要移动去的地方,参数2如果不存在,则会进行改名

rm命令

功能:删除文件、文件夹

语法:rm [-r -f] 参数...参数

  • 参数:支持多个,每一个表示被删除的,空格进行分隔

  • 选项:-r,删除文件夹使用

  • 选项:-f,强制删除,不会给出确认提示,一般root用户会用到

  • 参数也支持通配符*,用以做模糊匹配

    • text* 匹配以text开头的文件或文件夹
    • *text 匹配text结尾的文件或文件夹
    • *text * 匹配包含text的文件或文件夹

rm命令很危险,一定要注意,特别是切换到root用户的时候。

which命令

功能:查看命令的程序本体文件路径

语法:which 参数

  • 参数:被查看的命令

find命令

功能:搜索文件

语法1按文件名搜索:find 路径 -name 参数

  • 路径,搜索的起始路径

  • 参数,搜索的关键字,支持通配符*, 比如:*test表示搜索任意以test结尾的文件

  • 按文件大小查找:find 起始路径 -size +|-n [KMG]

  • 查找小于10KB的文件:find / -size -10k
    查找小于100MB的文件:find / -size -100mb
    查找大于1GB的文件:find / -size +1GB
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071  ## grep命令功能:过滤关键字语法:`grep [-n] 关键字 文件路径`- 选项-n,可选,表示在结果中显示匹配的行的行号。- 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用””将关键字包围起来- 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口> 参数文件路径,可以作为管道符的输入## wc命令功能:统计语法:`wc [-c -m -l -w] 文件路径`- 选项,-c,统计bytes数量- 选项,-m,统计字符数量- 选项,-l,统计行数- 选项,-w,统计单词数量- 参数,文件路径,被统计的文件,可作为内容输入端口> 参数文件路径,可作为管道符的输入## 管道符|写法:`|`功能:将符号左边的结果,作为符号右边的输入示例:`cat a.txt | grep itheima`,将cat a.txt的结果,作为grep命令的输入,用来过滤`itheima`关键字可以支持嵌套:`cat a.txt | grep itheima | grep itcast`## echo命令功能:输出内容语法:`echo 参数`- 参数:被输出的内容- 无需选择,只有一个参数,表示要输出的内容,复杂内容可以用“ "包围  演示:  - 在终端上显示:Hello Linux
      echo Hello Linux
      123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301- 带有空格或\等特殊符号,建议使用双引号包围  - 因为不包围的话,空格很容易被识别为参数2,尽管echo不受影响## `反引号功能:被两个反引号包围的内容,会作为命令执行示例:- echo \`pwd\`,会输出当前工作目录## tail命令功能:查看文件尾部内容语法:`tail [-f] 参数`- 参数:被查看的文件- 选项:-f,持续跟踪文件修改## head命令功能:查看文件头部内容语法:`head [-n] 参数`- 参数:被查看的文件- 选项:-n,查看的行数## 重定向符功能:将符号左边的结果,输出到右边指定的文件中去- `>`,表示覆盖输出  将左侧命令的结果,覆盖写入到符号右侧指定的文件中- `>>`,表示追加输出   将左侧命令的结果,追加写入到符号右侧指定的文件中## vi编辑器### 命令模式快捷键| 模式         | 命令  | 描述                              || ------------ | ----- | --------------------------------- || **命令模式** | `i`   | 在当前光标位置进入 `输入模式`     || **命令模式** | `a`   | 在当前光标位置之后进入 `输入模式` || **命令模式** | `I`   | 在当前行的开头进入 `输入模式`     || **命令模式** | `A`   | 在当前行的结尾进入 `输入模式`     || **命令模式** | `o`   | 在当前光标下一行进入 `输入模式`   || **命令模式** | `O`   | 在当前光标上一行进入 `输入模式`   || **输入模式** | `esc` | 任何情况下`esc` 都能回到命令模式  |****| 模式         | 命令             | 描述                   || ------------ | ---------------- | ---------------------- || **命令模式** | `键盘上、键盘k`  | 向上移动光标           || **命令模式** | `键盘下、键盘j`  | 向下移动光标           || **命令模式** | `键盘左、键盘h`  | 向左移动光标           || **命令模式** | `键盘右、键盘l`  | 向右移动光标           || **命令模式** | `0`              | 移动光标到当前行的开头 || **命令模式** | `$`              | 移动光标到当前行的结尾 || **命令模式** | `pageup(Pgup)`   | 向上翻页               || **命令模式** | `pagedown(PgDn)` | 向下翻页               || **命令模式** | `/`              | 进入搜索模式           || **命令模式** | `n`              | 向下继续搜索           || **命令模式** | `N`              | 向上继续搜索           || **模式**     | 命令       | 描述                             || ------------ | ---------- | -------------------------------- || **命令模式** | `dd`       | 删除光标所在行的内容             || **命令模式** | `ndd`      | n是数字,表示删除当前光标向下n行 || **命令模式** | `yy`       | 复制当前行                       || **命令模式** | `nyy`      | n是数字,复制当前行和下面的n行   || **命令模式** | `p`        | 粘贴复制的内容                   || **命令模式** | `u`        | 撤销修改                         || **命令模式** | `ctrl + r` | 反向撤销修改                     || **命令模式** | `gg`       | 跳到首行                         || **命令模式** | `G`        | 跳到行尾                         || **命令模式** | `dG`       | 从当前行开始,向下全部删除       || **命令模式** | `dgg`      | 从当前行开始,向上全部删除       || **命令模式** | `d$`       | 从当前光标开始,删除到本行的结尾 || **命令模式** | `d0`       | 从当前光标开始,删除到本行的开头 |### 底线命令快捷键![image-20240514212954898](./Linux/image-20240514212954898.png)## 命令的选项我们学习的一系列Linux命令,它们所拥有的选项都是非常多的。比如,简单的ls命令就有:-a -A -b -c -C -d -D -f -F -g -G -h -H -i -I -k -l -L -m -n -N -o -p -q -Q -r-R -s -S -t -T -u -U -v -w -x -X -1等选项,可以发现选项是极其多的。课程中, 并不会将全部的选项都进行讲解,否则,一个ls命令就可能讲解2小时之久。课程中,会对常见的选项进行讲解, 足够满足绝大多数的学习、工作场景。### 查看命令的帮助可以通过:`命令 --help`查看命令的帮助手册![image-20240514213545358](./Linux/image-20240514213545358.png)### 查看命令的详细手册可以通过:`man 命令`查看某命令的详细手册![image-20240514213539751](./Linux/image-20240514213539751.png)# Linux常用操作## 软件安装- CentOS系统使用:  - yum [install remove search] [-y] 软件名称    - install 安装    - remove 卸载    - search 搜索    - -y,自动确认- Ubuntu系统使用  - apt [install remove search] [-y] 软件名称    - install 安装    - remove 卸载    - search 搜索    - -y,自动确认> yum 和 apt 均需要root权限## systemctl功能:控制系统服务的启动关闭等语法:`systemctl start | stop | restart | disable | enable | status 服务名`- start,启动- stop,停止- status,查看状态- disable,关闭开机自启- enable,开启开机自启- restart,重启## 软链接功能:创建文件、文件夹软链接(快捷方式)语法:`ln -s 参数1 参数2`- 参数1:被链接的- 参数2:要链接去的地方(快捷方式的名称和存放位置)## 日期语法:`date [-d] [+格式化字符串]`- -d 按照给定的字符串显示日期,一般用于日期计算- 格式化字符串:通过特定的字符串标记,来控制显示的日期格式  - %Y   年%y   年份后两位数字 (00..99)  - %m   月份 (01..12)  - %d   日 (01..31)  - %H   小时 (00..23)  - %M   分钟 (00..59)  - %S   秒 (00..60)  - %s   自 1970-01-01 00:00:00 UTC 到现在的秒数示例:- 按照2022-01-01的格式显示日期  ![image-20240514213528329](./Linux/image-20240514213528329.png)- 按照2022-01-01 10:00:00的格式显示日期  ![image-20240514213523029](./Linux/image-20240514213523029.png)- -d选项日期计算  ![image-20240514213518516](./Linux/image-20240514213518516.png)  - 支持的时间标记为:    ![image-20240514213514134](./Linux/image-20240514213514134.png)## 时区修改时区为中国时区![image-20221027220554654](https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220554.png)## ntp功能:同步时间安装:`yum install -y ntp`启动管理:`systemctl start | stop | restart | status | disable | enable ntpd`手动校准时间:`ntpdate -u ntp.aliyun.com`## ip地址格式:a.b.c.d- abcd为0~255的数字特殊IP:- 127.0.0.1,表示本机- 0.0.0.0  - 可以表示本机  - 也可以表示任意IP(看使用场景)查看ip:`ifconfig`## 主机名功能:Linux系统的名称查看:`hostname`设置:`hostnamectl set-hostname 主机名`## 配置VMware固定IP1. 修改VMware网络,参阅PPT,图太多2. 设置Linux内部固定IP   修改文件:`/etc/sysconfig/network-scripts/ifcfg-ens33`   示例文件内容:   ```shell   TYPE="Ethernet"   PROXY_METHOD="none"   BROWSER_ONLY="no"   BOOTPROTO="static"            # 改为static,固定IP   DEFROUTE="yes"   IPV4_FAILURE_FATAL="no"   IPV6INIT="yes"   IPV6_AUTOCONF="yes"   IPV6_DEFROUTE="yes"   IPV6_FAILURE_FATAL="no"   IPV6_ADDR_GEN_MODE="stable-privacy"   NAME="ens33"   UUID="1b0011cb-0d2e-4eaa-8a11-af7d50ebc876"   DEVICE="ens33"   ONBOOT="yes"   IPADDR="192.168.88.131"        # IP地址,自己设置,要匹配网络范围   NETMASK="255.255.255.0"        # 子网掩码,固定写法255.255.255.0   GATEWAY="192.168.88.2"        # 网关,要和VMware中配置的一致   DNS1="192.168.88.2"            # DNS1服务器,和网关一致即可
    

ps命令

功能:查看进程信息

语法:ps -ef,查看全部进程信息,可以搭配grep做过滤:ps -ef | grep xxx

kill命令

image-20240514213501448

nmap命令

image-20240514213455076

netstat命令

功能:查看端口占用

用法:netstat -anp | grep xxx

ping命令

测试网络是否联通

语法:ping [-c num] 参数

image-20240514213446601

wget命令

image-20240514213436429

curl命令

image-20240514213428349

image-20240514213422455

top命令

功能:查看主机运行状态

语法:top,查看基础信息

可用选项:

image-20240514213411146

交互式模式中,可用快捷键:

image-20240514213405285

df命令

查看磁盘占用

image-20240514213350037

iostat命令

查看CPU、磁盘的相关信息

image-20240514213341010

image-20240514213334228

sar命令

查看网络统计

image-20240514213316310

环境变量

  • 临时设置:export 变量名=变量值
  • 永久设置:
    • 针对用户,设置用户HOME目录内:.bashrc文件
    • 针对全局,设置/etc/profile

PATH变量

记录了执行程序的搜索路径

可以将自定义路径加入PATH内,实现自定义命令在任意地方均可执行的效果

$符号

可以取出指定的环境变量的值

语法:$变量名

示例:

echo $PATH,输出PATH环境变量的值

echo ${PATH}ABC,输出PATH环境变量的值以及ABC

如果变量名和其它内容混淆在一起,可以使用${}

压缩解压

压缩

tar -zcvf 压缩包 被压缩1...被压缩2...被压缩N

  • -z表示使用gzip,可以不写

zip [-r] 参数1 参数2 参数N

image-20240514213306989

解压

tar -zxvf 被解压的文件 -C 要解压去的地方

  • -z表示使用gzip,可以省略
  • -C,可以省略,指定要解压去的地方,不写解压到当前目录

unzip [-d] 参数

image-20240514213259749

su命令

切换用户

语法:su [-] [用户]

image-20240514213251660

sudo命令

image-20240514213246030

比如:

1
itheima ALL=(ALL)       NOPASSWD: ALL

在visudo内配置如上内容,可以让itheima用户,无需密码直接使用sudo

chmod命令

修改文件、文件夹权限

语法:chmod [-R] 权限 参数

  • 权限,要设置的权限,比如755,表示:rwxr-xr-x

    image-20240514213237881

  • 参数,被修改的文件、文件夹

  • 选项-R,设置文件夹和其内部全部内容一样生效

chown命令

修改文件、文件夹所属用户、组

语法:chown [-R] [用户][:][用户组] 文件或文件夹

image-20240514213227133

用户组管理

image-20240514213217206

用户管理

image-20240514213144475

genenv命令

  • getenv group,查看系统全部的用户组

    image-20240514213133464

  • getenv passwd,查看系统全部的用户

    image-20240514213126691

env命令

查看系统全部的环境变量

语法:env

Shell脚本编程

概念

Shell是什么?

  • Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。看一个示意图

入门案例

  • 脚本要求格式
    • 脚本以 #!bin/bash 开头
    • 脚本执行需要权限
  • 编写第一个Shell脚本
    • 需求说明,新建一个Shell脚本,输出Hello world
1
2
3
4
5
6
7
8
9
10
11
# 创建shell脚本,注意以sh结尾
mkdir hello.sh

# 两种执行方式
# 1. (使用脚本的绝对路径和相对路径)默认root是没有执行权限的,我们要给shell脚本添加x运行权限
chmod u+x hello.sh
# 运行
./hello.sh

# 2. (sh+脚本)使用sh命令直接运行,不需要添加x权限
sh hello.sh

基本语法

  • Shell变量介绍
    • Linux Shell中的变量分为,系统变量和用户自定义变量
    • 系统变量:$HOME、$PWD、$SHELL、$USER等,比如:echo $HOME 等等
    • 显示当前shell中所有变量:set
  • shell变量的定义
    • 定义变量:变量名=值
    • 撤销变量:unset 变量
    • 声明静态变量:readonly变量,注意:不能unset
1
2
3
4
5
6
7
8
9
10
11
# 案例
1. 定义变量A
A=10
echo A=$A => A=100
2. 撤销变量A
unset A
echo A=$A => A=
3. 声明静态变量B=2,不能unset
readonly B=2
echo B=$B => B=2
4. 可把比那辆提升为全局环境变量,可供其他shell程序使用[该案例后面将]

注意:

image-20240515090101325

设置环境变量

  • 基本语法
    • export 变量名=变量值:将shell变量输出为环境变量/全局变量
    • source 配置文件:让修改后的配置信息立即生效
    • echo $变量名:查询环境变量的值

案例:

1
2
3
4
5
6
7
8
9
1. 在/etc/profile文件中定义TOMCAT_HOME环境变量
1> vim /etc/profile 进入vim编辑器
2> export TOMCAT_HOME=/opt/tomcat 定义环境变量
3> source /etc/profile 刷新
2. 查看环境变量TOMCAT_HOME的值
echo $TOMCAT_HOME 输出
3. 在另外一个shell程序中使用TOMCAT_HOME
进入另一个shell脚本
echo "tomcat_home=$TOMCAT_HOME"

shell脚本多行注释: :<<! 内容 !

位置参数变量

  • 介绍

    • 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如: ./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
  • 基本语法

    • $n :n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
    • $* :这个变量代表命令行中所有的参数,$* 把所有的参数堪称一个整体
    • $@ :这个变量代表命令行中所有的参数,不过$@ 把每个参数区分对待
    • $# :这个变量代表命令行中所有参数的个数

案例:

1
2
3
4
5
6
# 编写一个shell脚本position.sh 在脚本中获取到命令行的各个参数信息
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "所有的参数个数=$#"

预定义变量

  • 基本介绍

    • 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
  • 基本语法

    • $$ :当前进程的进程号(PID)
    • $! :后台运行的最后一个进程的进程号(PID)
    • $? :最后一次执行的命令的返回状态,如果这个变量的职位0,证明上一个命令正确执行,如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了

案例:

1
2
3
4
5
6
7
8
# 在一个shell脚本中简单使用一下预定义变量preVar.sh
#!/bin/bash
echo "当前正在运行的进程号id=$$"
# 以后台的方式运行一个脚本,并获取他的进程号
./myshell.sh &
echo "后台运行的最后一个进程号=$!"
echo "最后一次执行的结果=$?"

运算符

  • 基本介绍

    • 学习如何在shell中进行各种运算操作
  • 基本语法

    • “$((运算式))” 或 “$[运算式]” 或者 expr m + n
    • 注意expr 运算符间要有空格,如果希望将expr 的结果赋给某个变量,使用``
    • expr m - n
    • expr \*, /, % 乘、除、取余

案例:

1
2
3
4
5
6
7
8
9
10
11
# 计算(2+3)*4
# 第一种方式
RES1=$(((2+3)*4))
# 第二种方式
RES2=$[(2+3)*4]
# 第三种方式
TEMP=`expr 2 + 3`
RES=`expr $TEMP \* 4`
# 请求出命令行的两个参数[整数] 和 20
SUM=$[$1+$2]
./oper.sh 20 50

条件判断

image-20240515095940187

image-20240515100008957

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#案例1. "ok" 是否等于 "ok"
if [ "ok" = "ok" ]
then
echo "equal"
fi
#案例2. 23是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于"
fi
#案例3. /root/shcode/aaa.txt 目录中的文件是否存在
if [ -f /root/shcode/aaa.txt ]
then
echo "存在"
fi

流程控制

if分支

image-20240515103100113

注意:[条件判断式] 中括号和条件判断式之间必须有空格

案例:

1
2
3
4
5
6
7
8
# 请编写一个shell程序,如果输入的参数,大于等于60 则输出"及格了" 如果小于60,则输出 "不及格"
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi

case语句

image-20240515103930040

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 当命令行参数是1时,输出"周一",是2时,就输出"周二",其他情况输出 "other"
case $1 in
"1")
echo "周一"
;;
case $2 in
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

for循环

image-20240515104846827

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 打印命令行输入的参数[这里可以看出$* 和 $@ 的区别]
# $* 会把参数当成一个整体 所以只会输出一句话
# $@ 会把参数区分,所以有几个参数 就输出几句话
for i in "$*/$@"
do
echo "i的值为$i"
# 从1加到100的值输出显示
SUM=0
for (( i=1; i<=$1; i++ ))
do
SUM=$[$SUM+$i]
done
echo "SUM=$SUM"

while循环

image-20240515105936017

案例:

1
2
3
4
5
6
7
8
9
# 从命令中输入一个数n,求1+...+n的值是多少
SUM=0
i=0
while [ $i -gt $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM的值=$SUM"

read读取控制台输入

image-20240515110647470

案例:

1
2
3
4
5
6
# 案例1:读取控制台输入一个num值
read -p "请输入一个数num1=" NUM1
echo "你输入的num1=$NUM1"
# 案例2:读取控制台输入一个num值,在10s内输入
read -t 10 -p "请输入一个数NUM1=" NUM1
echo "你输入的num1="$NUM1

函数

basename

  • 函数介绍
    • shell编程和其他语言一样,有系统函数,也可以自定义函数,系统函数中,我们这里就介绍两个

image-20240515111138084

案例:

1
2
3
# 案例1:请返回/home/aaa/test.txt的 "test.txt" 的部分
basename /home/aaa/test.txt => test.txt
basename /home/aaa/test.txt .txt => test

dirname

image-20240515111520036

案例:

1
2
# 案例1:请返回/home/aaa/test.txt 的 /home/aaa
dirname /home/aaa/test.txt

自定义函数

image-20240515111933117

案例:

1
2
3
4
5
6
7
8
9
10
11
# 案例1:计算输入两个参数的和(动态的获取),getSum
function getSum()
{
SUM=$[$1+$2]
echo "和是=$SUM"
}

read -p "请输入一个数字n1=" n1
read -p "请输入一个数字n2=" n2

getSum $n1 $n2

Shell脚本案例

image-20240515132902308

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
BACKUP=/data/backup/db
# 获取当前时间
DATETIME=$(date +%Y-%m-%d_%H_%M_%S)
echo $DATETIME
# 数据库的地址
HOST=localhost
# 数据库的用户名
DB_USER=root
# 数据库密码
DB_PW=Zikl142857
# 数据库名
DATABASE=raehp

# 创建备份目录
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

# 备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

# 将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}

# 删除对应的备份文件
rm -rf ${BACKUP}/${DATETIME}

# 检查是否有10天前的备份数据库文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm {} \;
echo "备份数据库${DATABASE}成功"