1、文本编辑器
命令模式(vi、vim):控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
输入模式(a、i、o):正常的文本录入
末行模式(:w、:q):保存或退出文档,以及设置编辑环境
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、配置主机名称
[root01@VM-0-15-centos ~]$ vi /etc/hostname
3、配置网卡信息
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33设备类型: TYPE=Ethernet地址分配模式: BOOTPROTO=static网卡名称: NAME=ens33是否启动: ONBOOT=yesIP 地址: IPADDR=192.168.10.10子网掩码: NETMASK=255.255.255.0网关地址: GATEWAY=192.168.10.1DNS 地址: DNS1=192.168.10.1[root@localhost ~]# systemctl restart network #重启网卡
2、编写shell脚本
[root@localhost ~]# echo $SHELL #注意: 这个SHELL是大写的,区分大小写/bin/bash
1、编写shell脚本
编写shell脚本,脚本内容是以#!/bin/bash开头。文件名是以.sh结尾,用sh来执行
[root@localhost study]# vi example.sh#!/bin/bash #写到example.sh 文件中pwd[root@localhost study]# sh example.sh #执行脚本example.sh/study #显示执行结果
2、接收用户参数
[root@linuxprobe ~]# vim example.sh#!/bin/bashecho "当前脚本名称为$0"echo "总共有$#个参数,分别是$*。"echo "第 1 个参数为$1,第 5 个为$5。"[root@linuxprobe ~]# sh example.sh one two three four five six当前脚本名称为 example.sh总共有6个参数,分别是 one two three four five six。 第1个参数为 one,第5个为five
3、判断用户参数
SHELL脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。切记,条件表达式两边均应有一个空格
-d 测试文件是否为目录类型-e 测试文件是否存在-f 判断是否为一般文件-r 测试当前用户是否有权限读取-w 测试当前用户是否有权限写入-x 测试当前用户是否有权限执行[root@localhost study]# [ -d /study/d ][root@localhost study]# echo $?0[root@localhost study]# [ -f /study/d ][root@localhost study]# echo $?1
在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令
#前面成立,后面输出[root01@VM-0-15-centos ~]$ [ $USER = root01 ] && echo "exit"exit[root01@VM-0-15-centos ~]$ [ $USER != root01 ] && echo "exit"
除了逻辑“与”外,还有逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令
# 其实就是双重否定为肯定# 前面不成立,后面就会输出# 用户root01 不等于 root,前面成立,后面不输出[root01@VM-0-15-centos ~]$ [ $USER != root ] || echo "exit"[root01@VM-0-15-centos ~]$## 用户root01 不等于 root01,前面不成立,后面输出[root01@VM-0-15-centos ~]$ [ $USER != root01 ] || echo "exit"exit
[root@linuxprobe ~]# [ ! $USER = root ] && echo "user" || echo "root"root[root@linuxprobe ~]# [ ! $USER = root ] && echo "user" #这快不成立,所以会输出root
4、整数比较运算符
-eq 是否等于-ne 是否不等于-gt 是否大于-lt 是否小于-le 是否等于或小于-ge 是否大于或等于[root@localhost ~]# [ 10 -gt 10 ][root@localhost ~]# echo $?1[root@localhost ~]# [ 10 -eq 10 ][root@localhost ~]# echo $?0
[root@localhost ~]# free -mtotal used free shared buff/cache availableMem: 1819 185 1495 9 138 1486Swap: 2047 0 2047[root@localhost ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`[root@localhost ~]# echo $FreeMem1494[root@localhost ~]# [ $FreeMem -gt 1024 ] && echo "大于"大于
5、字符串比较运算符
= 比较字符串内容是否相同!= 比较字符串内容是否不同-z 判断字符串内容是否为空[root@localhost ~]# [ c = d ][root@localhost ~]# echo $?1[root@localhost ~]# echo $LANGzh_CN.UTF-8[root@localhost ~]# [ $LANG != "en.US" ] && echo "不匹配"不匹配
3、流程控制语句
1、if条件测试语句
if 条件语句的单分支结构由 if、then、fi 关键词组成,而且只在条件成立后才执行预设的
命令,相当于口语的“如果……那么……”。单分支的 if 语句属于最简单的一种条件判断结构
#示例内容[root@VM-0-15-centos study]# more get_user.sh#!/bin/bash# testing multiple commands in the then section#testuser=root01#if grep $testuser /etc/passwdthenecho "This is my first command"echo "This is my second command"echo "I can even put in other commands besides echo:"ls -a /home/$testuser/.b*fi#示例执行结果[root@VM-0-15-centos study]# sh get_user.shroot01:x:1000:1000::/home/root01:/bin/bashThis is my first commandThis is my second commandI can even put in other commands besides echo:/home/root01/.bash_history /home/root01/.bash_logout /home/root01/.bash_profile /home/root01/.bashrc
#从键盘输入一个数做比较[root@linuxprobe ~]# vim chkscore.sh#!/bin/bashread -p "请输入0~100的数:" GRADEif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; thenecho "$GRADE 优秀"elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; thenecho "$GRADE 良好"elseecho "$GRADE 不及格"fi[root@VM-0-15-centos study]# sh chkscore.sh请输入0~100的数:12$不及格
2、for循环语句,进行循环操作
#格式for变量 in 列表; do循环体done#1~10求和[root@VM-0-15-centos study]# more sum.sh#!/bin/bashfor i in {1..10} ; dolet SUM+=$idoneecho "$SUM"[root@VM-0-15-centos study]# sh sum.sh55
#格式for ((变量=初始值 ; 变量范围 ; 变量变化方式)); do循环体done#1~100求和,注意:多个()[root@VM-0-15-centos study]# more sum.sh#!/bin/bashfor ((i = 1 ; i < 100 ; i++)) ; dolet SUM+=$idoneecho "$SUM"[root@VM-0-15-centos study]# sh sum.sh4950
3、while条件循环语句
适用于循环次数未知的场景,要有退出条件,否则就成为死循环。
#使用while循环1-100求和[root@VM-0-15-centos study]# more example_while.sh#!/bin/bash#i=1#sum=0i=1sum=0echo "i为:$i"echo "sum初始化为:$sum"while [ $i -le 100 ] ; dolet sum=$sum+$ilet i++doneecho "$sum"[root@VM-0-15-centos study]# sh example_while.shi为:1sum初始化为:05050注:1、变量定义的时候不要有空格,直接i=12、变量相加的时候不要有空格,要不然会有以下报错,let sum=$sum+$isyntax error: operand expected (error token is "=")
#随机生成一个数去猜,看几次能猜中#!/bin/bashPRICE=$(expr $RANDOM % 1000)TIMES=0echo "商品实际价格为 0-999 之间,猜猜看是多少?"while truedoread -p "请输入您猜测的价格数目:" INTlet TIMES++if [ $INT -eq $PRICE ] ; thenecho "恭喜您答对了,实际价格是 $PRICE"echo "您总共猜测了 $TIMES 次"exit 0elif [ $INT -gt $PRICE ] ; thenecho "太高了!"elseecho "太低了!"fidone
4、case条件测试语句
case 变量 in常量1)语句;;常量2)语句;;*)默认语句;;esac#输入单个字母或者数字进行判断; 注:字母只能是单个,多个就无法判断正确[root@VM-0-15-centos study]# more case_example.sh#!/bin/bashread -p "请输入一个字符" answerecho "$answer"case "$answer" in[a-z])echo "您输入的是字母" ;;[0-9])echo "您输入的数字" ;;*)echo "您输入的是空格、功能键或其他控制字符。"esac[root@VM-0-15-centos study]# sh case_example.sh请输入一个字符ww您输入的是字母
4、计划任务服务程序
计划任务在Linux 中一般使用 Crontab,通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 Shell 脚本
crontab命令选项# crontab -u-u指定一个用户-l列出某个用户的任务计划-r删除某个用户的任务-e编辑某个用户的任务分钟 小时 日 月 星期 命令特殊符号的含义星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜 线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
5 * * * * ls 指定每小时的第5分钟执行一次ls命令30 5 * * * ls 指定每天的 5:30 执行ls命令30 7 8 * * ls 指定每月8号的7:30分执行ls命令30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段] */15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令 ]50 7 * * * root run-parts /etc/cron.daily 每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
4.1 crontab文件存
[root@localhost cron]# pwd/var/spool/cron
4.2 crontab的服务
crontab的服务名称 crond
