写点什么

07_Linux 基础 - 计划任务 - 备份脚本 - 变量定义和使用

作者:mycpen
  • 2022 年 9 月 02 日
    江苏
  • 本文字数:9265 字

    阅读完需:约 30 分钟

@[TOC](文章目录)

# 07_Linux 基础-计划任务-备份脚本-变量定义和使用

---

## 一. 计划任务

> 主要内容:周期性的计划任务 crontab

>

> ==/var/spool/cron/ 统一存放计划任务的目录==

>

> ==/var/log/cron 日志文件==

>

> ==/etc/cron cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/ crontab 的顺风车==

>

> /etc/crontab

>

> ==crontab -l==

>

> ==crontab -e==

>

> crontab ==-u cali== -e

>

> crontab -u cali -l

>

> ==如何知道计划任务是否执行?==

>

> ==用户没有登录,计划任务是否执行?答:会执行==

>

> ==黑客也会去利用计划任务定时执行程序,你如何去检查?==

>

> ==annacron 将电脑主机因为系统故障关机导致计划任务没有被执行,正常启动后,anacron 会去检测没有执行的计划任何,重新执行一次==

>

> at 一次性的计划任务

>

> ==at 11:45==

>

> ==at -l==

### cron

> 计划任务

>

> 1.什么是计划任务? (闹钟)

>

> 计划什么时候去做什么事情

> 一次性的计划任务

>

> at

>

> 周期性的计划任务

>

> crontab

> linux 系统里的==执行计划任务的进程==--》==crond==

>

> crond 会==每分钟==去检查下所有用户的计划任务

>

>

>

> \# ps aux|grep crond

>

> root 887 0.0 0.1 36300 3508 ? Ss 9 月 24 0:00 /usr/sbin/==crond== -n

>

> root 16948 0.0 0.0 12320 984 pts/0 S+ 10:05 0:00 grep --color=auto ==crond==

>

> \# cd ==/var/spool/cron/ (注:统一存放计划任务的目录)==

>

> \# ls

>

> \#

> 计划任务 原理

>

> ![image-20220503205140202](https://img-blog.csdnimg.cn/img_convert/2b81a3219bb3861d8f851a2f7296d0aa.png)

> 原理 时间的格式和语法(笔试)

>

> ![image-20220503205205407](https://img-blog.csdnimg.cn/img_convert/5b6406c16799884d013d7cb575097b64.png)

>

> (注:每个用户都可以用的命令)

>

> \# ==crontab -l (注:查看当前用户的计划任务)==(每个用户只能看自己的,root 用户能看所有的)

>

> no crontab for root

>

> \#

>

> \# ==crontab -e (注:创建计划任务)==

>

> …… (注:vim 编辑器 本质上是文本文件)

>

> \# crontab -l

>

> ==30 4 * * *== bash /lianxi/9_25/backup_log.sh

>

> ==*/5 * * * *== bash /lianxi/9_25/backup_log.sh

>

> ==50 3 6-9 10 *== bash /lianxi/9_25/backup_log.sh

>

>

>

> ![image-20220503205331550](https://img-blog.csdnimg.cn/img_convert/4734713e8a9f9a938d3834341d1cf1ee.png)

>

> ==\*== 该范围内的任意时间

>

> ==,== 间隔的多个不连续时间点

>

> ==\-== 一个连续的时间范围

>

> ==/n== 指定间隔的时间频率

>

> ==(注:crond 进程 最低的时间间隔是 1 分钟)==

>

> (注:时间不能冲突 日期和星期不能冲突)

> \#

>

> \# cd ==/var/spool/cron/ (注:统一存放计划任务的目录,一个用户对应一个文件名)==

>

> \# ls

>

> cali liangluyao ==root==

>

> \# ==cat root (注:文件里面 就是 cronta -e 编辑的)==

>

> 30 4 * * * bash /lianxi/9_25/backup_log.sh

>

> */5 * * * * bash /lianxi/9_25/backup_log.sh

>

> 50 3 6-9 10 * bash /lianxi/9_25/backup_log.sh

>

> \#

>

> \# ll ==(注:每一个用户的计划任务都会放在/var/spool/cron/目录下)==

>

> 总用量 12

>

> -rw-------. 1 ==cali== cali 31 9 月 25 10:27 cali

>

> -rw-------. 1 ==liangluyao== liangluyao 31 9 月 25 10:28 liangluyao

>

> -rw-------. 1 ==root== root 139 9 月 25 10:25 root

>

> \#

> ==问:如何知道计划任务是否执行?==

>

> ==答:看日志文件,/var/log/cron。==

>

> ==或者直接去看效果。==

>

> \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=

>

> 日志文件==(注:记录 crond 执行的计划任务,存放在/var/log/cron,用来排错。)==

>

> \# tail -f ==/var/log/cron== (注:tail -f 盯着文件末尾看)

>

>

>

> Sep 25 10:30:01 sanchuang-linux CROND[17143]: (root) CMD (bash /lianxi/9_25/backup_log.sh)

>

> Sep 25 10:30:01 sanchuang-linux CROND[17147]: (liangluyao) CMD (date >>~/liang.txt)

>

> Sep 25 10:30:02 sanchuang-linux CROND[17119]: (root) CMDOUT (tar: 从成员名中删除开头的“/”)

>

> Sep 25 10:30:02 sanchuang-linux CROND[17119]: (root) CMDOUT (tar: /var/log/audit/audit.log: 在我们读入文件时文件发生了变化)

>

> Sep 25 10:30:02 sanchuang-linux CROND[17155]: (cali) CMD (date >>~/cali.txt)

> 示例 1(root 用户):

>

> 每天早上 7:50 自动开启 sshd 服务,22 点 50 时关闭

>

> ==service sshd start (注:开启 sshd 服务)==

>

> ==service sshd stop (注:关闭 sshd 服务)==

>

>

>

> 50 7 * * * service sshd start

>

> 50 22 * * * service sshd stop

>

>

>

> 每隔 5 天的 12 点整==清空==一次 FTP 服务器公共目录/var/ftp/pub

>

> 0 12 */5 * * rm -rf /var/ftp/pub==/* (注:清空:删除里面所有东西)==

>

>

>

>

>

> 每周六的 7:30 时,==重新==启动 httpd 服务

>

> ==service httpd restart (注:重启 httpd 服务)==

>

> 30 7 * * 6 service httpd restart

>

>

>

> 每周一、三、五的 17:30 时,打包备份/etc/httpd 目录

>

> 30 17 * * 1,3,5 tar czf /==backup==/httpd.tar.gz /etc/httpd ==(注:/backup/是备份目录)==

>

>

>

> 示例 2(jerry 用户): ==(注:宿主目录:~/)==

>

> 每周日晚上 23:55 时将“/etc/passwd”文件的内容复制到==宿主目录==中,保存为 pwd.txt 文件

>

> 55 23 * * 0 ==/usr/bin/cp== /etc/passwd ~/pwd.txt ==(注:命令的绝对路径)==

> /etc/crontab 是 cron 的一个配置文件

>

> \# vim /etc/crontab

>

> SHELL=/bin/bash (注:计划任务执行命令时用/bin/bash 执行)

>

> ==PATH===/sbin:/bin:/usr/sbin:/usr/bin ==(注:它有自己的 PATH 变量,和 shell 的 PATH 变量不同)==

>

> MAILTO=root ==(注:所有 计划任务里的命令,建议使用命令的绝对路径,因为 PATH 变量的问题)==

>

> ==(注↑:默认情况,计划任务出了问题,crontab 会给 root 发邮件)==

>

> \# For details see man 4 crontabs

>

>

>

> \# Example of job definition: (注:对命令的解释)

>

> \# .---------------- minute (0 - 59)

>

> \# | .------------- hour (0 - 23)

>

> \# | | .---------- day of month (1 - 31)

>

> \# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

>

> \# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

>

> \# | | | | |

>

> \# * * * * * user-name command to be executed

> \# crontab ==-u cali== -e ==(注:用 root 用户为 cali 创建计划任务)==

>

> \# crontab -u cali -l (注:查看)

> 1.电脑关机了计划任务是否执行?答:不执行

>

> ==2.用户没有登录,计划任务是否执行?答:会执行==

> \# ==w (注:查看哪个用户从哪里登录)==

>

> ![img](https://img-blog.csdnimg.cn/img_convert/bf47db83026280e38b1e6ef70331f16b.jpeg)

>

> \# ==tail -f /var/log/cron (注:日志文件)==

> ==3.黑客也会去利用计划任务定时执行程序,你如何去检查?==

>

> 去==/var/spool/cron==目录下查看每一个计划任务文件

>

> 看日志 ==/var/log/cron==

>

> crontd 的顺风车目录 (如下)

>

>

>

> \#

>

> \# ==cd /etc/cron\*\*\*\*\*\*\*==

>

> cron.d/ ==cron.daily/== cron.deny ==cron.hourly/ cron.monthly/== crontab ==cron.weekly/==

>

> \# cd /etc/cron

>

> (注:crontab 的顺风车)

>

>

>

> ==黑客也可以把需要执行的程序放到这些文件夹里==

>

> ==cron.daily --》Linux 系统里要求 crond 每天去执行的事情==

>

> ==cron.hourly --》Linux 系统里要求 crond 每小时去执行的事情==

>

> ==cron.monthly --》Linux 系统里要求 crond 每月去执行的事情==

>

> ==cron.weekly --》Linux 系统里要求 crond 每周去执行的事情==

>

> (注:# ls cron.daily

>

> logrotate (每天都会执行,crond 每天运行一次(脚本,用 sh 执行))

>

> \# ls cron.hourly

>

> 0==anacron (annacron 将电脑主机因为系统故障关机导致计划任务没有被执行,正常启动后,anacron 会去检测没有执行的计划任何,重新执行一次)==

### at

> at 命令 一次性的计划任务

>

> yum install at -y

>

>

>

> \# ==at 11:45==

>

> warning: commands will be executed using /bin/sh

>

> at> touch $(date +%F).txt

>

> at> <EOT> ==(注:退出 Ctrl+D)==

>

> job 1 at Fri Sep 25 11:45:00 2020

>

> Can't open /var/run/atd.pid to signal atd. No atd running?

>

> \# ==at -l (注:查看)==

>

> 1 Fri Sep 25 11:45:00 2020 a root

>

> \#

---

## 二. 计划任务练习-备份脚本

> 主要内容:==chmod 777== /opt/fnum.txt (注:==设置任何用户都可以对文件/opt/fnum.txt 读写执行==)

>

> ==2>/dev/null==

>

> ==/dev/null 特殊的文件,相当于黑洞文件,任何的内容重定向到这个文件都会消失,不保存==

>

> ==正确的输出重定向==

>

> ==\>==

>

> ==\>>==

>

> ==错误的输出重定向==

>

> ==2>==

>

> ==2>> 追加==

>

> ==不管正确的还是错误的都往一个文件里重定向==

>

> ==&>==

>

> ==&>> 追加==

>

> ==\>1.txt 清空 1.txt 文件里的内容==

>

> ==删除 xull 这个用户所有的计划任务== rm -rf /var/spool/cron/xull

>

> ==\# crontab -u xull -r (注 *)==

>

> 取消计划任务

> 脚本+计划任务=自动化

>

> 先编写脚本,再创建计划任务

### 计划任务实验

> 计划任务实验:

>

>

>

> 1.为 root 用户编写计划任务:每周 2、4、6 的 10 点到 17 点的每隔 5 分钟自动将/etc/passwd、/etc/shadow 这 2 个重要系统文件到 user.备份的日期和时间.tar.gz 这种名称的文件里(例如:user.201202011615.tar.gz)备份文件放到/opt/目录下面。

>

> backup_shadow_pwd.sh

>

>

>

> \# cat backup_shadow_pwd.sh

>

> \#!/bin/bash

>

> mkdir -p /opt #注:date +%Y%m%d%H%M%S , ==date 后面有空格==

>

> tar czf /opt/user.$(date +%Y%m%d%H%M%S).tar.gz /etc/passwd /etc/shadow

>

> \# $(date +%Y-%m-%d-%H) 注意空格 上面的

>

> ==crontab -e==

>

> */5 10-17 * * 2,4,6 bash /lianxi/9_25/backup_shadow_pwd.sh #==(注:路径要接对,绝对路径)==

> 2.==root 用户==在/opt==新建==了一个文件 fnum.txt 专门用来统计普通用户的文件个数。请==为普通用户 hello 编写计划任务==:要求每 5 分钟,将系统中属于 hello 用户的文件的个数自动保存到/opt/fnum.txt 文件中。内容格式为:“日期时间 姓名 拥有的文件个数是:数目”。每行中间用“\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*”隔开

>

> file_num.sh

>

>

>

> \# touch /opt/fnum.txt (注:==新建空文件,普通用户建不了,root 用户去建==)

>

> \# ==chmod 777== /opt/fnum.txt (注:==设置任何用户都可以对文件/opt/fnum.txt 读写执行==)

>

>

>

> [cali@sanchuang-linux ~]$ crontab -l

>

> */5 * * * * date >>~/cali.txt

>

> 5 12-18 * * * date >>~/cali.txt

>

> */1 * * * * bash /home/cali/file_num.sh

>

> [cali@sanchuang-linux ~]$ pwd

>

> /home/cali

>

> $ cat file_num.sh ==(注:脚本放在普通用户家目录里)==

>

> \#!/bin/bash

>

> fnum=$(find / -user cali -type f ==2>/dev/null== |wc -l) ==(注:普通用户 文件权限不够 是出错的)==

>

> (注↑:错误重对象)

>

> ctime=$(date +%F_%H%M%S)

>

> echo "${ctime} cali the number of files : $fnum" ==>>/opt/fnum.txt (注:追加重定向 写到文件里去)==

>

> echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" ==>>/opt/fnum.txt (注:追加重定向 写到文件里去)==

>

> $

>

>

>

> $ crontab -e ==(注:是哪个用户就哪个用户创建计划任务,==cali 创建)

>

> */1 * * * * bash /home/cali/file_num.sh

>

>

>

> $ pwd

>

> /home/cali ==(注:脚本的路径)==

> 每行中间用“\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*”隔开 解决方法

>

> \# cat a.sh

>

> echo "helllo"

>

> echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"

>

> echo "cali"

>

> echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"

>

> \#

>

>

>

> \# num=$(find / -user liangluyao |wc -l)

> $ find / -user cali -type f 2>/dev/null|wc -l

>

>

>

> ==/dev/null 特殊的文件,相当于黑洞文件,任何的内容重定向到这个文件都会消失,不保存==

>

> null 零,空,无效的

### 重定向

> ==正确的输出重定向==

>

> ==\>==

>

> ==\>>==

>

> \=\=\=\=\=\=

>

> ==错误的输出重定向==

>

> ==2>==

>

> ==2>> 追加==

>

> \=\=\=\=\=\=

>

> ==不管正确的还是错误的都往一个文件里重定向==

>

> ==&>==

>

> ==&>> 追加==

>

> ![img](https://img-blog.csdnimg.cn/img_convert/1f893c9cab739f4e995ad79854a2c753.jpeg)

>

> ==ls 命令执行成功重定向到 1.txt 执行失败重定向到 2.txt==

>

> $ ==ls >1.txt 2>2.txt==

>

>

>

> $ ==>1.txt 清空 1.txt 文件里的内容==

>

> $ cat 1.txt

>

> $

>

>

>

> $ ls &>1.txt ==不管正确的还是错误的都往一个文件里重定向==

### 练习总结

> 练习总结:

>

> 问题:

>

> 1. 2>/dev/null

>

> 2. 如何查看效果

>

> \# cat fnum.txt

>

> \# tail -f /var/log/cron (日志文件)

>

> 3. 取消计划任务

>

> ==删除 xull 这个用户所有的计划任务== rm -rf /var/spool/cron/xull

>

> ==\# crontab -u xull -r (注 *)==

>

> 将文件里的计划任务注释或者删除 #*/1 * * * * bash /home/xull/file_num.sh

>

> \# cd /var/spool/cron/ ——》# rm -rf xull ==# crontab -u xull -r==

>

> \# cd /var/spool/cron/ ——》# vim xull ——》 加 # 注释掉

>

> 4. 某个用户的计划任务如何创建

>

> 5. 文件的路径问题和权限问题(root 可以访问任务地方的文件,但是普通不行,只能访问有限的路径)

>

>

>

> 将 root 用户的所有计划任务追加到 xull 用户的计划任务里

>

> \# cd /var/spool/cron

>

> \# cat root >>xull (注:注意权限问题,能否访问)

>

> 每一个用户的计划任务都存放在一个文件里 /var/spool/cron/

> 2.root 用户在/opt2 新建了一个文件 fnum.txt 专门用来统计普通用户的文件个数。请为普通用户 xull 编写计划任务:要求每 5 分钟,将==系统中属于 xull 用户的文件的个数==自动保存到/opt2/fnum.txt 文件中。内容格式为:“日期时间 姓名 拥有的文件个数是:数目”。每行中间用“\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*”隔开

>

>

>

> 使用 root 用户新建/opt2 目录

>

> mkdir /opt2

>

> cd /opt2/

>

> touch /opt2/fnum.txt 文件

>

> chmod 777 /opt2/fnum.txt 授权

>

>

>

>

>

> ==xull 用户需要去编写脚本,创建计划任务(普通用户)==

>

> ==脚本:建议放在用户的家目录下==

>

>

>

> \# su - xull

>

> 上一次登录:五 9 月 25 15:53:35 CST 2020pts/1 上

>

> $ pwd

>

> ==/home/xull==

>

> $ ls

>

> $ vim file_num.sh (注:脚本放到自己的家目录下,用户 xull 去创建)

>

>

>

> $ cat file_num.sh

>

> \#!/bin/bash

>

>

>

> num=$(find / -user xull -type f 2>/dev/null |wc -l)

>

> \#current time (注:当前的时间)

>

> ctime=$(date +%F%H%M%S)

>

> echo "${ctime} xull 文件数量是 $num" >>/opt2/fnum.txt (注:>>追加)

>

> echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" >>/opt2/fnum.txt (注:一行隔开)

>

>

>

> $

>

> (注:vim 交互式的。脚本是背后执行的,用 echo)

>

>

>

> $ crontab -e

>

> */1 * * * * bash /home/xull/file_num.sh

>

> $

>

> 切换到 root 用户

>

> $ exit

>

> \# cd /var/spool/cron/ (注:该目录下文件存放计划任务)

>

> \# ls

>

> cali liangluyao root ==xull==

>

> \#cat xull (注:文件存放计划任务)

>

> ==*/1 * * * * bash /home/xull/file_num.sh==

---

## 三. 黑客-计划任务

> 主要内容:假如你是黑客,想在别人的机器上,每 10 分钟让它的服务器重启一次或者每天重启一次

>

> 关机命令:init 6

>

> reboot

>

> ==1.停止 crond 服务==

>

> \# service crond stop

>

> 2.查找可能存放计划任务的目录

>

> /var/spool/cron (注:先挪走)

>

> /etc/cron.d (注:与 cron.hourly 有关)

>

> /etc/cron.weekly

>

> /etc/cron.daily

>

> /etc/cron.monthly

>

> 3.检查发现没有问题了,再重新启动 crond 服务

>

> \# service crond start

>

> Redirecting to /bin/systemctl start crond.service

>

> \# ps aux|grep crond

>

> 实在有的话

>

> \# tail -f /var/log/cron (日志文件)

>

> 开机启动流程

>

> \# cd /root (注:root 用户家目录下)

>

> \# ls -a (注:隐藏文件)

>

> \# vim .bashrc

>

> \# vim .bash_profile

>

> \# vim /etc/profile (注:可以快捷筛选查找 /reboot /init)

>

> \# vim /etc/bashrc (注:可以快捷筛选查找 /reboot /init)

>

> \# cat /etc/rc.local

> 假如你是黑客,想在别人的机器上,每 10 分钟让它的服务器重启一次或者每天重启一次

>

> \=\=\=\=

>

> 192.168.0.45 root 123456

>

>

>

> 关机命令:init 6

>

> reboot

>

> \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=

>

> 在各个路径下看 有没有可疑的 init6 和 reboot

>

> ==1.停止 crond 服务==

>

> \# service crond stop

>

> 2.查找可能存放计划任务的目录

>

> /var/spool/cron (注:先挪走)

>

> /etc/cron.d (注:与 cron.hourly 有关)

>

> /etc/cron.weekly

>

> /etc/cron.daily

>

> /etc/cron.monthly

>

> 3.检查发现没有问题了,再重新启动 crond 服务

>

> \# service crond start

>

> Redirecting to /bin/systemctl start crond.service

>

> \# ps aux|grep crond

>

> root 1506 3.6 0.1 36304 3656 ? Ss 16:54 0:00 /usr/sbin/crond -n

>

> root 1511 0.0 0.0 12320 1052 pts/0 S+ 16:54 0:00 grep --color=auto crond

>

> \#

>

> 实在有的话

>

> \# tail -f /var/log/cron (日志文件)

>

> (注:通过日志去排查)

>

> \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=

>

> 集中放计划任务的地方 /var/spool/cron/

>

> \# cd /var/spool/cron/

>

> \# ls

>

> cali liangluyao root xull

>

> \# cat cali

>

> ……(查看有没有可疑的,vim 全部注释掉)

>

> 或者把所有文件全部挪走,如下操作

>

> \# ls

>

> cali liangluyao root xull

>

> \# mkdir /backup (注:根下面建一个/backup 目录)/backup 备份目录

>

> mv * /backup/ (把文件 cali liangluyao root xull 挪到 /backup 目录下)

>

> 计划任务停了,crond 不会执行

>

> \# cd /backup/

>

> \# ls

>

> cali liangluyao root xull

>

> \# cat cali (注:把计划任务文件挪走后,再再/backup 目录下 一个个排查)

>

> ……

>

> \# cat liangluyao

>

> ……

>

> \# w (注:查看哪些用户登录)

>

> \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=

>

> 顺风车

>

> \# cd /etc/cron.daily

>

> \# ls

>

> \# vim …

>

> \# cd /etc/cron.hourly/

>

> \# cd /etc/cron.monthly

>

> \# cd /etc/cron.weekly

>

> \# cd /etc/cron.d (注:每小时执行是每小时的第一分钟执行)

>

> ![img](https://img-blog.csdnimg.cn/img_convert/f334d6f03e2652ed9eaf121d70baa64d.jpeg)

>

> (注:run-parts 是一个命令,运行这个文件夹里的所有文件)

>

> \=\=\=\=\=\=\==\=\=\=\=\=\=\==\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=

>

> 开机启动流程

>

> \# cd /root (注:root 用户家目录下)

>

> \# ls -a (注:隐藏文件)

>

> \# vim .bashrc

>

> \# vim .bash_profile

>

> \# vim /etc/profile (注:可以快捷筛选查找 /reboot /init)

>

> \# vim /etc/bashrc (注:可以快捷筛选查找 /reboot /init)

>

> \# cat /etc/rc.local

>

> \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\==\=\=\=\=

---

## 四. 变量定义和使用

> 主要内容:

>

> 变量的命名:1.下划线命名法 (shell 里建议)2.驼峰命名法 3.匈牙利命名法

>

> 变量命名的注意事项

>

> shell 里如果变量没有定义,输出的是空值

>

> ==env== 查看 shell 里的==环境变量==

>

> ==set== 查看当前 shell 里==所有的变量==

>

> ==export 输出变量为全局变量==

>

> \# ==echo $$ (注:显示当前 bash 的进程号)(注:$$代表当前 bash 的进程号)==

>

> \# ==bash (注:起一个子进程,子 bash)==

>

> \# ==echo "$mv $sg hello" (注:输出一串内容的时候,用双引号引起来)==

>

> \# ==echo '$mv $sg hello' (注:单引号:所见即所得 $接变量名不会引用变量的值)==

```

shell 编程

1.变量的定义

variable 变量的

sg=tanglf

变量的命名:

1.下划线命名法 (shell 里建议)

sc_sg=tanglf

2.驼峰命名法

ScSg=wangtc

小驼峰

scSg=wangtc

大驼峰

ScSg=wangtc

3.匈牙利命名法

```

```

变量命名的注意事项:

1.不是以数字开头

2.不要全部是数字

3.不要包含特殊符号 #!@^$<>等

4.=左右不能有空格

```

> linux 系统里的环境变量都是大写的

>

> 自定义变量尽量使用小写

>

>

>

> 变量尽量要先定义后使用

>

> shell 里如果变量没有定义,输出的是空值

>

>

>

> \# sc_sg=zhangxueyou

>

> \# echo $sg_sg

>

> ==(←注:变量 sg_sg 没有定义,输出的是空值)==

>

> \# echo $sc_sg

>

> zhangxueyou

>

> \# ==echo $sgsg/$mvmv==

>

> ==/ (←注:变量{sgsg} {mvmv}没有定义,输出的是“/”根)==

>

> \#

>

> \# rm -rf ==$sgsg/$mvmv==

>

> rm: 在'/' 进行递归操作十分危险

>

> rm: 使用 --no-preserve-root 选项跳过安全模式

>

> \#

> ==env== 查看 shell 里的==环境变量==

>

> ==set== 查看当前 shell 里==所有的变量==

>

>

>

> 变量是有作用域

>

> 全局变量

>

> 局部变量

>

> ==export 输出变量为全局变量==

>

> ==用法:先定义再输出==

> ssh 访问 22 号端口,sshd 监听 22 号端口

>

> web 服务是 80 端口

> \# ==echo $$ (注:显示当前 bash 的进程号)(注:$$代表当前 bash 的进程号)==

>

> 1425

>

> \#

>

> \# ==export sg (注:输出 sg 这个变量为全局变量)==

> \# echo $$

>

> ==1425==

>

> \# mv=xull

>

> \# ==bash (注:起一个子进程,子 bash)==

>

> \# echo $mv

>

> ==(注:输出为空,变量不继承)==

>

> \# echo $$

>

> ==1598==

> \# mv=xull

>

> \# ==export mv (注:输出变量为全局变量)(注:export 输出)==

>

> \# ==bash (注:起一个子进程,子 bash)==

>

> \# echo $mv

>

> Xull ==(注:子进程继承了变量)==

>

> \#

> \# vim /root/.bash_profile

>

> ![img](https://img-blog.csdnimg.cn/img_convert/daed7162e618dc2f9d32a61eaf92abf9.jpeg)

> ==输出一串内容的时候,用双引号引起来==

>

> ==单引号:所见即所得 $接变量名不会引用变量的值==

>

>

>

> \# echo =="$mv $sg hello" (注:输出一串内容的时候,用双引号引起来)==

>

> xull wangtc hello

>

> \# echo =='$mv $sg hello' (注:单引号:所见即所得 $接变量名不会引用变量的值)==

>

> $mv $sg hello

>

> \#

---

发布于: 刚刚阅读数: 4
用户头像

mycpen

关注

还未添加个人签名 2020.12.08 加入

还未添加个人简介

评论

发布
暂无评论
07_Linux基础-计划任务-备份脚本-变量定义和使用_Linux_mycpen_InfoQ写作社区