1、文本编辑器

命令模式(vi、vim):控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
输入模式(a、i、o):正常的文本录入
末行模式(:w、:q):保存或退出文档,以及设置编辑环境
20200310100246899.png

1、常用命令
序号 用法 注解
1 [N]dd 删除N行
2 dG 删除光标之后的所有行
3 [N]yy 复制N行
4 u 撤销上一步操作
5 p 将复制的内容进行粘贴
6 ^、0、home 将光标移至行首
7 $、end 将光标移至行末
8 :N 跳到N行
9 :s/one/two 将当前光标所在行的第一个 one 替换成 two
10 :%s/one/two/g 将全文中的所有 one 替换成 two
11 :wq 保存退出
12 :q! 不保存强制退出

2、配置主机名称
  1. [root01@VM-0-15-centos ~]$ vi /etc/hostname

3、配置网卡信息
  1. [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
  2. 设备类型: TYPE=Ethernet
  3. 地址分配模式: BOOTPROTO=static
  4. 网卡名称: NAME=ens33
  5. 是否启动: ONBOOT=yes
  6. IP 地址: IPADDR=192.168.10.10
  7. 子网掩码: NETMASK=255.255.255.0
  8. 网关地址: GATEWAY=192.168.10.1
  9. DNS 地址: DNS1=192.168.10.1
  10. [root@localhost ~]# systemctl restart network #重启网卡

2、编写shell脚本

  1. [root@localhost ~]# echo $SHELL #注意: 这个SHELL是大写的,区分大小写
  2. /bin/bash

1、编写shell脚本

编写shell脚本,脚本内容是以#!/bin/bash开头。文件名是以.sh结尾,用sh来执行

  1. [root@localhost study]# vi example.sh
  2. #!/bin/bash #写到example.sh 文件中
  3. pwd
  4. [root@localhost study]# sh example.sh #执行脚本example.sh
  5. /study #显示执行结果

2、接收用户参数
  1. [root@linuxprobe ~]# vim example.sh
  2. #!/bin/bash
  3. echo "当前脚本名称为$0"
  4. echo "总共有$#个参数,分别是$*。"
  5. echo "第 1 个参数为$1,第 5 个为$5。"
  6. [root@linuxprobe ~]# sh example.sh one two three four five six
  7. 当前脚本名称为 example.sh
  8. 总共有6个参数,分别是 one two three four five six 1个参数为 one,第5个为five

3、判断用户参数

SHELL脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。切记,条件表达式两边均应有一个空格

  1. -d 测试文件是否为目录类型
  2. -e 测试文件是否存在
  3. -f 判断是否为一般文件
  4. -r 测试当前用户是否有权限读取
  5. -w 测试当前用户是否有权限写入
  6. -x 测试当前用户是否有权限执行
  7. [root@localhost study]# [ -d /study/d ]
  8. [root@localhost study]# echo $?
  9. 0
  10. [root@localhost study]# [ -f /study/d ]
  11. [root@localhost study]# echo $?
  12. 1

在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令

  1. #前面成立,后面输出
  2. [root01@VM-0-15-centos ~]$ [ $USER = root01 ] && echo "exit"
  3. exit
  4. [root01@VM-0-15-centos ~]$ [ $USER != root01 ] && echo "exit"

除了逻辑“与”外,还有逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令

  1. # 其实就是双重否定为肯定
  2. # 前面不成立,后面就会输出
  3. # 用户root01 不等于 root,前面成立,后面不输出
  4. [root01@VM-0-15-centos ~]$ [ $USER != root ] || echo "exit"
  5. [root01@VM-0-15-centos ~]$
  6. ## 用户root01 不等于 root01,前面不成立,后面输出
  7. [root01@VM-0-15-centos ~]$ [ $USER != root01 ] || echo "exit"
  8. exit
  1. [root@linuxprobe ~]# [ ! $USER = root ] && echo "user" || echo "root"
  2. root
  3. [root@linuxprobe ~]# [ ! $USER = root ] && echo "user" #这快不成立,所以会输出root

4、整数比较运算符
  1. -eq 是否等于
  2. -ne 是否不等于
  3. -gt 是否大于
  4. -lt 是否小于
  5. -le 是否等于或小于
  6. -ge 是否大于或等于
  7. [root@localhost ~]# [ 10 -gt 10 ]
  8. [root@localhost ~]# echo $?
  9. 1
  10. [root@localhost ~]# [ 10 -eq 10 ]
  11. [root@localhost ~]# echo $?
  12. 0
  1. [root@localhost ~]# free -m
  2. total used free shared buff/cache available
  3. Mem: 1819 185 1495 9 138 1486
  4. Swap: 2047 0 2047
  5. [root@localhost ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
  6. [root@localhost ~]# echo $FreeMem
  7. 1494
  8. [root@localhost ~]# [ $FreeMem -gt 1024 ] && echo "大于"
  9. 大于

5、字符串比较运算符
  1. = 比较字符串内容是否相同
  2. != 比较字符串内容是否不同
  3. -z 判断字符串内容是否为空
  4. [root@localhost ~]# [ c = d ]
  5. [root@localhost ~]# echo $?
  6. 1
  7. [root@localhost ~]# echo $LANG
  8. zh_CN.UTF-8
  9. [root@localhost ~]# [ $LANG != "en.US" ] && echo "不匹配"
  10. 不匹配

3、流程控制语句

1、if条件测试语句

if 条件语句的单分支结构由 if、then、fi 关键词组成,而且只在条件成立后才执行预设的
命令,相当于口语的“如果……那么……”。单分支的 if 语句属于最简单的一种条件判断结构

  1. #示例内容
  2. [root@VM-0-15-centos study]# more get_user.sh
  3. #!/bin/bash
  4. # testing multiple commands in the then section
  5. #
  6. testuser=root01
  7. #
  8. if grep $testuser /etc/passwd
  9. then
  10. echo "This is my first command"
  11. echo "This is my second command"
  12. echo "I can even put in other commands besides echo:"
  13. ls -a /home/$testuser/.b*
  14. fi
  15. #示例执行结果
  16. [root@VM-0-15-centos study]# sh get_user.sh
  17. root01:x:1000:1000::/home/root01:/bin/bash
  18. This is my first command
  19. This is my second command
  20. I can even put in other commands besides echo:
  21. /home/root01/.bash_history /home/root01/.bash_logout /home/root01/.bash_profile /home/root01/.bashrc
  1. #从键盘输入一个数做比较
  2. [root@linuxprobe ~]# vim chkscore.sh
  3. #!/bin/bash
  4. read -p "请输入0~100的数:" GRADE
  5. if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
  6. echo "$GRADE 优秀"
  7. elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
  8. echo "$GRADE 良好"
  9. else
  10. echo "$GRADE 不及格"
  11. fi
  12. [root@VM-0-15-centos study]# sh chkscore.sh
  13. 请输入0~100的数:12
  14. $不及格

2、for循环语句,进行循环操作
  1. #格式
  2. for变量 in 列表; do
  3. 循环体
  4. done
  5. #1~10求和
  6. [root@VM-0-15-centos study]# more sum.sh
  7. #!/bin/bash
  8. for i in {1..10} ; do
  9. let SUM+=$i
  10. done
  11. echo "$SUM"
  12. [root@VM-0-15-centos study]# sh sum.sh
  13. 55
  1. #格式
  2. for ((变量=初始值 ; 变量范围 ; 变量变化方式)); do
  3. 循环体
  4. done
  5. #1~100求和,注意:多个()
  6. [root@VM-0-15-centos study]# more sum.sh
  7. #!/bin/bash
  8. for ((i = 1 ; i < 100 ; i++)) ; do
  9. let SUM+=$i
  10. done
  11. echo "$SUM"
  12. [root@VM-0-15-centos study]# sh sum.sh
  13. 4950

3、while条件循环语句

适用于循环次数未知的场景,要有退出条件,否则就成为死循环。

  1. #使用while循环1-100求和
  2. [root@VM-0-15-centos study]# more example_while.sh
  3. #!/bin/bash
  4. #i=1
  5. #sum=0
  6. i=1
  7. sum=0
  8. echo "i为:$i"
  9. echo "sum初始化为:$sum"
  10. while [ $i -le 100 ] ; do
  11. let sum=$sum+$i
  12. let i++
  13. done
  14. echo "$sum"
  15. [root@VM-0-15-centos study]# sh example_while.sh
  16. i为:1
  17. sum初始化为:0
  18. 5050
  19. 注:1、变量定义的时候不要有空格,直接i=1
  20. 2、变量相加的时候不要有空格,要不然会有以下报错,let sum=$sum+$i
  21. syntax error: operand expected (error token is "=")
  1. #随机生成一个数去猜,看几次能猜中
  2. #!/bin/bash
  3. PRICE=$(expr $RANDOM % 1000)
  4. TIMES=0
  5. echo "商品实际价格为 0-999 之间,猜猜看是多少?"
  6. while true
  7. do
  8. read -p "请输入您猜测的价格数目:" INT
  9. let TIMES++
  10. if [ $INT -eq $PRICE ] ; then
  11. echo "恭喜您答对了,实际价格是 $PRICE"
  12. echo "您总共猜测了 $TIMES 次"
  13. exit 0
  14. elif [ $INT -gt $PRICE ] ; then
  15. echo "太高了!"
  16. else
  17. echo "太低了!"
  18. fi
  19. done

4、case条件测试语句
  1. case 变量 in
  2. 常量1)语句;;
  3. 常量2)语句;;
  4. *)默认语句;;
  5. esac
  6. #输入单个字母或者数字进行判断; 注:字母只能是单个,多个就无法判断正确
  7. [root@VM-0-15-centos study]# more case_example.sh
  8. #!/bin/bash
  9. read -p "请输入一个字符" answer
  10. echo "$answer"
  11. case "$answer" in
  12. [a-z])
  13. echo "您输入的是字母" ;;
  14. [0-9])
  15. echo "您输入的数字" ;;
  16. *)
  17. echo "您输入的是空格、功能键或其他控制字符。"
  18. esac
  19. [root@VM-0-15-centos study]# sh case_example.sh
  20. 请输入一个字符w
  21. w
  22. 您输入的是字母

4、计划任务服务程序

计划任务在Linux 中一般使用 Crontab,通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 Shell 脚本

  1. crontab命令选项
  2. # crontab -u
  3. -u指定一个用户
  4. -l列出某个用户的任务计划
  5. -r删除某个用户的任务
  6. -e编辑某个用户的任务
  7. 分钟 小时 星期 命令
  8. 特殊符号的含义
  9. 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  10. 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9
  11. 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6
  12. 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜 线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
  1. 5 * * * * ls 指定每小时的第5分钟执行一次ls命令
  2. 30 5 * * * ls 指定每天的 5:30 执行ls命令
  3. 30 7 8 * * ls 指定每月8号的730分执行ls命令
  4. 30 5 8 6 * ls 指定每年的68530执行ls命令
  5. 30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
  6. 30 3 10,20 * * ls 每月10号及20号的330执行ls命令[注:“,”用来连接多个不连续的时段]
  7. 25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段] */15 * * * * ls 15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
  8. 30 6 */10 * * ls 每个月中,每隔106:30执行一次ls命令[即每月的1112131日是的630执行一次ls命令 ]
  9. 50 7 * * * root run-parts /etc/cron.daily 每天750root 身份执行/etc/cron.daily目录中的所有可执行文件

4.1 crontab文件存
  1. [root@localhost cron]# pwd
  2. /var/spool/cron

4.2 crontab的服务
  1. crontab的服务名称 crond