一、shell
1.复习:
(1)shell脚本创建:
1.通过vi/vim编辑器,创建一个.sh结尾的文件。
2.shell文件声明: #!/bin/bash
3.shell文件中可以执行命令(命令集合),运算、逻辑控制、函数
(2)shell执行:
1.sh xxx.sh
2.bash xxx.sh
3.source xxx.sh
4.. xxx.sh
5.授予执行权限后 ./xxx.sh
(3)shell脚本编写 :
问题,编写一个shell 文件,可以传入文件名和行号,通过该shell获取指定文件中第几行内容
#!/bin/bashcat -n $1 | head -n $2 | tail -1
调用:
sh getcont.sh /etc/passwd 10
问题:通过shell完成任意文件的重命名
问题:通过shell完成任意文件的重命名
#!/bin/bashmv $1 $2if [ $? -eq 0 ]then echo '操作成功'else echo '操作失败'fi
获取传入参数内容、长度
echo $@echo $*echo $#
判断上一条命令是否执行成功:
echo $?0 成功非0 失败
运算:
算法运算符:
+ - * / % ++ -- ++ 表述 变量值+1 自增长i=1第一种:i=`expr $i + 1`第二种:let i+=1第三种:let i++第四种:((i++))第五种:i=$(($i+1))echo $i
比较运算符:
数字= -> -eq> -> -gt< -> -lt>= -> -ge<= -> -le!= => -ne字符串: 前后有空格===!=
逻辑运算符:
与 &&或 ||非 !
(4)判断:
判断,用于分支和循环的条件。因为判断返回布尔类型数据(true和false)
接收用户输入,判断该数是否大于0
#!/bin/bashread -p "请输入一个数字:" numtest $num -gt 0echo $?
判断用户输入是否为admin
read -p "请输入用户名:" nametest $name == "admin"echo $?
判断用户名(admin)和密码(123456)
test $1 = "admin" && test $2 -eq 123456echo $?
判断用户名(admin或者root)
test $1 = 'admin' || test $1 = 'root'echo $?
(6) 分支结构:
if-else结构:if 判断then 语句elif 判断 then 语句...else 语句fi
2.分支结构:
(1)case 了解
case 变量名 in匹配条件) 匹配成功后的业务代码;;
匹配条件2) 匹配成功后的业务代码;;*)
#类似于else最后兜底业务代码esaccase 结构中,所有的条件是离散的。不能使用范围(不能使用比较运算符)
问题:当用户输入1.时,显示登录;当输入2时,显示注册当输入3时,提示退出
#!/bin/bash
#接收一个用户输入
read -p "Enter:" numcase $num in
1) echo '登录';;
2) echo "注册";;
3) echo '退出';;
*) echo "异常"esac
3.循环结构
控制解释器让代码在一个时间范围内,重复完成一些操作。
(1)for 循环
通常情况下,通过for循环完成明确循环次数的操作
for ((变量=值;判断;自增))
do
#开始 类似{ 需要循环的语句done #结束 类似}
for((i=0;i<10;i++))
do echo $i
done
for i in 1 2 3 4 5 6
do echo $i
done
for i in {数字..数字}
do 语句
done
for i in {1..5}
do echo $idone
for i in `seq 数字`do 语句donefor i in `seq 5`do echo $idone
#从字符串中取值:
#!/bin/bashstr="Hello, World!"
# 提取每个字符
for i in $(seq 0 ${#str});
do
echo "${str:$i:1}"
done
(2)while循环 通常情况下,使用while循环完成死循环。
while 判断
do 语句
done
如果有明确次数变量=值
while 条件
do
语句
变量自增
done
i=0
while [ $i -lt 10 ]
do
echo $i
let i++done
练习:for 和while 分别实现1-100累加 : 1+2+3+4+5+…+100
#!/bin/bash
#for
s=0
for i in {1..100}
do
s=$(($s+$i))
done
echo $s#
whiles=0
i=1
while [ $i -le 100 ]
do
s=$(($s+$i))
let i++
done
echo $s
(3) until 循环(linux专属) 与while循环一致
until [ 条件 ]
do 语句
done
4)select (linux专属)
与for—in循环一致
select 变量 in 变量1 变量2 变量3 ...
do 语句
done
(5)循环控制
关键字:
break : 当条件满足时,触发break操作,循环中break之后代码不会执行,break所在的循环结束
continue : 当条件满足时,触发continue, 本次循环结束,关键字后的代码不执行
exit: 满足条件时,直接结束程序。
for i in {1..10}
do
for j in {1..10}
do
if [ $j -eq 5 ]
then
continue|break|exit
fi
echo $j
done
done
练习:通过循环结构,接收用户输入,并讲用户输入拼接“woniu”回显,当用户输入quit,退出
i=0
while true
do
read -p 'Enter:' word
if [ $word = 'quit']
then
break|exit
fi
echo $word'woniu'
done
4.函数:
函数是一种封装方式,讲代码中可能重复使用部分,统计放在一个结构中,这个结构就是函数。方便重复调用。提高代码的维护性。
定义:
function 函数名(){
函数体
[return 数据]
}
调用:函数名 参数...
echo $?
#查看返回值
#定义一个函数f(x,y)=x+y功能
function add()
{
c=$(($1+$2))
echo $c
}
#函数调用add 1 2
练习:顶一个函数,实现用户输入数字的求和
二、字符串操作:
1.sed
sed,流编辑期。可以对文件进行增、删、改、查操作。sed命令在不使用-i参数时,所有增删改都发生内存中,不会改变源文件。
语法:sed 选项 命令 文件选项:
-i 将编辑后的结果写入原文件
-e 执行多条命令
-n 只显示被执行的结果(查看使用)命令:
#常见操作
a:增加,在当前行下面增加一行指定内容。
c:替换,将选定行替换为指定内容。
d:删除,删除选定的行。
i:插入,在选定行上面插入一行指定内容。
#下面两个用的多
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
n # 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N # 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
s:替换,替换指定字符。
y:字符转换。
(1)添加:
(1)添加:
sed '3a hello world' /tmp/passwd
sed '3i hi woniu' /tmp/passwd
#在每行上插入
sed 'i hello' /tmp/passwd#在每行下插入
sed 'a hello' /tmp/passwd
(2) 删除:
sed '4d' /tmp/passwd 删除第4行
sed '3,5d' /tmp/passwd 删除3到5行数据
(3) 修改:
sed '3c helloworld' /tmp/passwd #修改第三行
sed '3,5c hellowoniu' /tmp/passwd #修改三到五行内容
(4)查找
sed -n '3p' /tmp/passwd #显示第三行内容
sed -n '3,5p' /tmp/passwd #显示第3到5行内容
sed -n 'n;p' /tmp/passwd #显示偶数行
sed -n 'p;n' /tmp/passwd #显示奇数行
(5)替换:
sed 's/旧字符/新字符/g' /tmp/passwd
正则: g: 全局模式 i: 忽略大小写
sed 's/bin/BIN/g' /tmp/passwd 对文件所有满足条件的字符串进行替换
sed 's/bin/BIN/' /tmp/passwd 对每行中第一个出现的字符串进行替换
awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符
awk是一种文本格式化的方式,默认以空格将字符串拆分成为表结构,可以以列为单位输出内容:
语法:awk -F '符号' '{print $数字}' 文件名
-F 指明以哪种方式分割字符串
print $数字:
0 整行数据
1 第1列
2 第2列
(1)定义一个字符串 : s=’hello world’
awk '{print $1}' 文件名echo $s | awk '{print $2}' #显示workd
(2)指定分割符: s=”Aho,Weinberger,Kernighan”
echo $s | awk -F ',' '{print $2}' #显示Weinberger
(3)NR指定行过滤
awk -F ":" 'NR==3{print $1}' /etc/passwd 显示第三行第1列awk -F ":" 'NR==3||NR==10{print $1}' /etc/passwd 显示第三行和第十行第1列awk awk -F ":" 'NR==3,NR==10{print $1}' /etc/passwd 显示第3到10行第1列
(4) 通过正则查找
awk -F ":" '$1~/root/{print $0}' /etc/passwd 找到以root开头的行
练习:通过ping命令,从响应中找到ip
ping www.baidu.com -c 1 | awk -F "[()]" 'NR==1{print($2)}'
三、定时任务:
1.at
只一次定时器:
安装: yum install -y at
启动|重启|关闭服务:systemctl start|restart|stop atd
at now+时间
>echo 'hello'
ctrl + d 保存退出
时间: 数字+单位 (minute(s) hour(s) day(s))
2.crontab
周期任务:在给定的时间执行命令
启动和关闭服务:crond
systemctl start|stop crondcrontab
-选项 -l 显示当前用户创建的所有任务 -e 进入编辑 -r 删除
五星:
(1)创建任务:
crontab -e*/1 * * * * echo 'hello' 每分钟执行1 * * * * echo 'hello' 每小时的第1分钟执行
(2)查看
crontab -l
(3)清空任务列表
crontab -r
补充:与定时任务无关
1.链接文件: 链接文件在linux分为两种:软硬链接的相同点:都会随着原文件的改变而改变,同样,修改链接文件后,原文件也会变。
1.软链接:当原文件删除后,软链接失效
创建:ln -s 原文件名 链接名
2.硬链接: 当原文件删除后,链接文件依然有效
船舰 : ln -d 原文件名 链接名
硬链接文件类型属于文件,软链接是连接
-rwxr—r—. 2 root root 129 4月 15 17:38 test_d.sh
lrwxrwxrwx. 1 root root 7 4月 15 17:34 test_s.sh -> test.sh
2.别名:
当操作命令过程时,可以通过命别名方式将命令变短,方便下次使用
语法:alias 简短的单词=’长的命令‘
alias ens33='vi /etc/sysconfig/network-scripts/ifcfg-ens33'输入ens33打开ifcfg-enss文件
3.磁盘空间查看:
du -lh 显示当前目录中文件磁盘占用df -lh 显示整个文件系统的磁盘占用
4.内存查看
free