linux---shell脚本

shell是一个命令解释器,为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,
停止甚至编写一些程序。
shell还是一个功能强大的编程语言,易编写,易调试,灵活性强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统
命令。

shell分类:
Bourne Shell 主文件名为sh Bash
C Shell:与c语言相似
主流shell:Bash

linux支持的shell:
/etc/shells
(输入exit 退出)

1.echo 输出命令
echo [选项] [输出内容]
-e:支持反斜线控制的字符转换
echo -e “ab\bc” 删除左侧字符 结果:ac

2.第一个脚本
vi hello.sh
#!/bin/Bash
#The first program
echo -e “Mr.shenchao is the most honest man in LampBrother”

3.脚本执行
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh

通过bash调用执行脚本
bash hello.sh

从windows转换为linux格式:
dos4unix [文件名]
例:dos4unix hello.sh

shell基础(字符截取命令):
1.cut字段提取命令
2.printf命令
3.awk命令
4,sed命令

1.提取列:
cut [选项] 文件名
选项:
-f 列号:提取第几列
-d分隔符:按照指定分隔符分割列
例:
cut -f 2,4 文件名
cut -d “:” -f 1,2 文件名
cut一般跟grep一起使用。

2.printf ‘输出类型输出格式’ 输出内容
输出类型:
%ns: 输出字符串。n是数字指代输出几个字符
%ni:输出整数。n是数字指代输出几个数字
%m.nf 输出浮点型。m和n是数字,指代输出的整数位数和小数位数,如%8.2f代表共输出8位数,其中2位是小数,6位是整数。
\n :换行
\r :回车,也就是Enter键
\t :水平输出退格键,也就是Tab键
例:printf %s 1 2 3 4 5 6
123456
printf %s %s %s1 2 3 4 5 6
%s %s1 2 3 4 5 6
printf '%s %s %s’1 2 3 4 5 6
1 2 34 5 6
printf ‘%s\t %s\t %s\t %s\t %s\t %s\n’ $(cat student.txt)

3.在awk命令的输出中支持print和printf命令
print:print会在每个输出之后自动加入换行符(linux默认没有print命令)。
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符。

awk '条件1{动作1} 条件2{动作2}…'文件名
条件:
一般使用关系表达式作为条件
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于
动作:
格式化输出
流程控制语句
例:
awk ‘{printf $2 “\t” $6"\n"}’ 文件名
df -h | grep sda5 | awk ‘{print $5}’ | cut -d “%” -f 1

BEGIN
#awk ‘BEGIN{printf"This is a transcript \n"}{printf $2 “\t” $6 “\n”}’ 文件名 (在执行命令之前,先打印This is a transcript )
#awk ‘BEGIN{FS=":"}{print $ 1 “\t” $3}’ /etc/passwd

END
awk ‘END{printf “The End \n”}{printf $2 “\t” $6 “\n”}’ student.txt

FS内置变量:
cat /etc/passwd | grep “/bin/bash” | awk ‘BEGIN {FS=":" {printf $1 “\t” $3 “\n”}}’

关系运算符
cat student.txt | grep -v Name | awk ‘$6>=87 {printf $2 “\n”}’

4.sed命令:
sed是一种几乎包括所有UNIX平台(包括linux)的轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令。

sed [选项] ‘[动作]’ 文件名
选项:
-n :一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e :允许对输入数据应用多条sed命令编辑。
-i : 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

动作:
a :追加
c :行替换
i :插入。
d: 删除
p:打印
s:子串替换

例:
sed -n ‘2p’ student.txt 输出文件的第2行

shell基础(环境配置文件简介)
source命令:
source 配置文件 或 . 配置文件
环境变量配置文件简介:
环境变量配置文件主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。

环境变量配置文件:
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
修改1,2,5 对所有登入linux系统的都生效。。。

/etc/profile作用:
USER变量:
LOGNAME变量:
MAIL变量:
PATH变量:
HOSTNAME变量:
umask:
调用/etc/profile.d/*.sh文件

~/.bash_profile作用:
调用了~/.bashrc文件。
在PATH变量后面加入了"$HOME/bin"这个目录。

shell基础(Bash)
1.历史命令:
history [选项] [历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入命令保存文件
~/.bash_history
历史命令默认保存1000条,可以在环境变量文件/etc/profile中进行修改。
历史命令调用:
1.使用上下箭头调用以前的历史命令。
2.使用!n,重复执行第n条历史命令。
3.使用 !!重复执行上一条命令。
4.使用 !字符串 重复执行最后一条以该字符串开头的命令。

2.命令与文件补全
在Bash中,只要在输入命令或文件时,按tab键就会自动进行补全。
注:当你输入的字符有多个时,按一次tab键不会有反应,此时再继续按tab键就会出现所有的以你输入字符开头的字符串。

3.命令别名
alias 别名=‘原命令’
例:alias vi=‘vim’

查询别名:
alias

命令执行顺序:
1.绝对路径或相对路径执行的命令
2.别名
3.Bash的内部命令
4.$PATH环境变量定义的目录查找顺序找到的第一个命令。

让别名永久生效:
vi /root/.bashrc

删除别名:
unalias 别名

4.Bash常用快捷键:
ctrl+c :强制终止当前命令
ctrl+L :清屏,相当于clear
ctrl+U:删除和剪切光标之前的命令。
ctrl+Y :粘贴ctrl+U或ctrl+K 剪切的内容
ctrl+R:会出现搜索界面,就会从历史命令搜索
ctrl+D:退出当前终端

5.输入输出重定向
设备:键盘, 设备名:/dev/sdin, 文件描述符:0,标准输入;
设备:显示器, 设备名:/dev/sdout, 文件描述符:1,标准输出;
设备:显示器, 设备名:/dev/sdterr, 文件描述符:2,标准错误输出;

输出重定向(把命令的结果保存到文件)
标准输出重定向:
1.命令 >文件 以覆盖方式,把命令的正确输出输出到指定的文件或设备中。
2.命令 >>文件 以追加方式,把命令的正确输出输出到指定的文件或设备中。
标准错误输出重定向:
1.错误命令 2>文件 以覆盖方式,把命令的错误输出输出到指定的文件或设备中。
2.错误命令 2>>文件 以追加方式,把命令的错误输出输出到指定的文件或设备中。
正确输出和错误输出同时保存:
命令 >文件 2>&1 以覆盖的方式,将正确输出和错误输出都保存在同一个文件中
命令 >文件 2>>&1 以追加的方式,将正确输出和错误输出都保存在同一个文件中
命令 &>文件 以覆盖的方式,将正确输出和错误输出都保存在同一个文件中
命令 &>>文件 以追加s的方式,将正确输出和错误输出都保存在同一个文件中
命令>>文件1 2>>文件2 把正确的输出追加到文件1 中,错误的输出追加到文件2中

注:ls &>dev/null 将ls的输出结果丢到垃圾箱,相当于不保存任何数据,作用:输出没有意义的东西时。

输入重定向(通过文件作为输入):
wc [选项] [文件名]
-c 统计字节数
-w 统计单词数
-l 统计行数

命令 <文件 把文件作为命令的输入
例:wc <anaconda-ks.cfg
注:输入wc命令后,就可以输入内容,按ctrl+D就可以将你输入的内容作为标准输入,统计行数,单词数以及字符。

shell编程(字符处理命令)
1.排序命令sort:
sort [选项] 文件名
选项:
-f :忽略大小写
-n :以数值型进行排序,默认使用字符串型排序
-r :反向排序
-t :指定分隔符,默认是分隔符是制表符
-k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

2.统计命令wc
wc [选项] 文件名
选项:
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数

shell编程(条件判断)
-d文件:判断该文件是否存在,并且是否为目录文件(是目录为真)
-e文件:判断该文件是否存在(存在为真)
-f文件:判断该文件是否存在,并且是否为普通文件(是普通文件为真)
例:
两种判断格式:
test -e /root/install.log
或 [-e /root/install.log]
例:
[-d/root] && echo “yes” || echo “no” #第一个判断命令如果正确执行,则打印yes,否则打印no.

按照文件权限进行判断
-r文件:判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真)
-w文件:判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真)
-x文件:判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真)
例:
[-w/root/student.txt] && echo “yes” || echo “no” #判断student.txt是否具有写权限,如果有打印yes,否则打印no.

两个文件之间进行比较:
文件1 -nt 文件2:判断文件1修改时间是否比文件2的新(新则为真)
文件1 -ot 文件2:判断文件1修改时间是否比文件2的旧(旧则为真)
文件1 -ef 文件2:判断文件1和文件2的Inode号是否一致,可以理解为两个文件是否为同一个文件。这个是判断硬链接是很好的方法。
例:
[/root/student.txt -ef /tmp/stu.txt] && echo “yes” || echo “no”

两个整数之间比较
整数1 -eq 整数2 判断整数1是否和整数2相等(相等为真)
整数1 -nq 整数2 判断整数1是否和整数2不相等(不相等为真)
整数1 -gt 整数2 判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2 判断整数1是否小于整数2(小于为真)
整数1 -ge 整数2 判断整数1是否大于等于整数2(大于等于为真)
整数1 -le 整数2 判断整数1是否小于等于整数2(小于等于为真)
例:
[23 -gt 22] && echo yes || echo no

字符串的判断:
-z字符串 判断字符串是否为空(为空返回真)
-n字符串 判断字符串是否为非空(非空返回真)
字符串1=字符串2 判断字符串1和字符串2 是否相等(相等返回真)
字符串1!=字符串2 判断字符串1和字符串2 是否不相等(不相等返回真)
例:
[-z “$name”] && echo yes || echo no #判断name变量是否为空

多重条件判断
判断1 -a 判断2 :逻辑与,判断1和判断2都成立,最终的结果才为真
判断1 -o 判断2 :逻辑或,判断1和判断2有一个成立,最终的结果为真
! 判断 :逻辑非,使原始的判断式取反
例:
aa=24
[-n “ a a " − a " aa" -a " aa"a"aa” -gt 23] && echo “yes” || echo “no”

shell编程(流程控制if语句)
1.单分支if条件语句
if [ 条件判断式 ] ; then
程序
fi
或者:
if [ 条件判断式 ]
then
程序
fi
例:
#!/bin/bash
rate=$(df =h | grep “/dev/sda3” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 5}̲' | cut -d "%" …rate -ge 80]
then
echo “Warning! /dev/sda3 is full!!”
if

2.双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
3.多分支if条件语句
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行的程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行的程序2
…省略更多条件…
else
当所有条件都不成立时,最后执行此程序
fi

shell编程 正则表达式
正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep,awk,sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls,find,cp这些命令不支持正则表达式,所以只能使用shell自己的通配符进行匹配。

例:
grep “a*” [文件名]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值