SHELL编程简介
主讲内容:
.shell执行选项
-
.shell中的vim编辑器
(A)vim XX,编辑之后,按ESC,用Shift:进行保存。返回命令。
(B) 文本文件编辑器,ls显示当前文件所在的所有文件,:wq退出保存,:q!强制性退出,三种模式:命令,编辑,(输入),末行模式。i,a,o::i可以在当枪光标位置插入,a在当前光标位置下一个位置插入,o|在当光前标位置插入另一行编辑模式。R,i::R随时进入替换模式,i是指替换一个字符,一个个替换。
(C)快捷键模式 ::
yy(),nyy,dd ndd,p,u,s,x,/,n,gg,G,0,$
yy:(复制当前光标所在行)
nyy:复制当前光标所在的N行
dd:(剪):删除当前行
ndd:剪切N|行
p:粘贴当前光标的下一行
u:撤销
x:删除键
/:查找的快捷键,()
n:下移行查找,N上移行查找
gg:瞬间移动(文件首第一行)
G:瞬间移动到(文件尾最后一行)
0: 移动到最前一行
$:移动到最后一行
w保存,q退出。。
set nu:设置行号,
:+常数:调到指定行
syntax on/off:打开和关闭语法提示
命令的其它组成::
"#"root的提示符,"$"普通用户提示符.
ctrl+c::强制性无条件推出
!!上一次刚刚运行的命令,命令历史history,,!+命令动词。
命令+--help;;帮助文档
loc^c,updatedb,,数据库的文件查找.
文本文件查看:
cat,more,less,head,tail
cat wenjianming
> >> < >>..重定向符 。。输入 输出〉 〉〉。。没有文件时可以创建文件,,储存结果,>>可以追加文件,,不会覆盖,〉回覆盖以前的文件
sudo::
sudo 命令,只是一步操作
su -,输入密码,,进行用户环境切换 ,exit退出 。
fdisk -l,查看当前磁盘分区
rpm查询功能:
-i用来安装软件包,后来用来家软件包
-q是用来查询指定的软件包 是否在系统中安装过的信息
-ql
--nodeps是用来忽略依赖软件包之间的关系
--force不考虑依赖关系,强制安装
单杠选项
rm -rf +名称,,删除
rpm -qa 是用来查询Linux系统中的所有软件
rpm -q+包的名称,查询指定软件包是否安装
rpm -qi+包的名称,查询纸带那个软件包的详细信息
rpm -ivh +软件包的名子,安装软件包
rpm -ql+包的名称,查询指定名称软件中所包括的文件列表
rpm -qf+文件名称,查询指定文件所属的软件包
rpm -qpi+包文的名称,查询指定RPM包文件的详细信息
rpm -qpl+包文的名称,查询指定RPM包中包含的文件列表
打包::
tar
-c创建一个软件包,-x揭开一个软件包。
-v显示包里的信息(打开包),
-f一丁根的是包名,-z调用gzip
-j调用bzip2
-c解压到指定路径
-t再不揭开的情况下。了解包里的信息
符号和echo:
echo:显示结果,命令。
$#代表的是数量,,
$*表示所有参数的位置
$?表示命令执行后返回的状态,用于检查上一个命令的执行是否正确;在linux中,命令退出状态为0表示命令正确,任何非0值表示命令执行错误
$$表示当前进程的进程号
$!表示后台运行的最后一个进程号
$0表示当前执行进程名
自定义变量的设置:$ DAY=sunday
自定义变量的查看与引用 :$ echo $DAY
自定义的变量的输出:$ export DAY
自定义变量的清除:$ unser DAY
Bash的命令历史与命令重复
历史命令的查看:$ history
用户命令历史保存文件:~/ .bash_history
命令历史的清除:$ history -c
"双引号":弱引用
'单引号':强引用
`白引号 `:
~:默认为家目录
#:
\;转移字符,将来有特殊意义的字符还原
echo ${变量名:-/+/=/?字符串}
-:变量存在,输出值,,不存在输出字符串
+:变量存在,输出字符串,不存在输出空白
=:存在值,,就负值给他,不存在输出字符串
?:文件名存在输出值,不存在提示
echo ${path#/*/}
#:从头开始匹配满足条件的字符,把第一个的字符删除掉,把剩下的的字符显示出来
##; 从头开始匹配满足条件的字符,把最长的字符删除掉把剩下的的字符显示出来
%:从后往前开始匹配满足条件的字符,把最短的字符删除掉,把剩下的的字符显示出来
%%:从后往前开始匹配满足条件的字符,把第一个的字符删除掉,把剩下的的字符显示出来
例题:path="hjf/hf/jfsdp/jfd.fk/"
echo $path (回车)
echo ${path#/*/}(回车)
echo ${test/aa/bb}和${test//aa/bb}
/:将第一个满足条件的替换
//:将全部满足条件的替换
流的控制
1. #!/bin/bash(头文件)
if 判断表达式
then
语句块
elif
判断表达式
then
语句块
else
fi
2.实例:
if test "$1>$2"
then
echo $1
else
echo $2
fi
3.数字的判断:
gt大于
lt小于
eq等于
le小于等于
ge大于等于
字符的判断:
=表示等于。判断是否是为零
-n是否有长度
-z是否为空
文件的判断:
-b是否是块式文件
-d是否是一个目录
-f是否是普通文件
-c是否是字符式文件
-h是否是符号连接文件
-e文件是否存在
-r文件是否可读
-w文件是否可写
-x文件是否可以执行
-s判断文件是否是空文件
格式:-* 加文件名
-nt判断文件一是否比文件二新
-ot判断文件一是否比文件二旧
用于两个文件之间
case 变量 in
值1)
|语句1;;
值2
语句1;;
。。。。。。。
w)
语句w;;
esac
1。for语法:
for 变量名 in list
do
....
done
for 变量名
do
....
done
2。whlie语法:
while 变量名 (当满足条件才执行)
do
....
done
3。until 变量名(当满足条件就不执行了)
do
....
done
用户和管理组:
建立用户帐号:~#adduser 名字
查看:/home/文件下
7个字段 :用户名,密码标识类,uid号,组gid,用户信息,用户家目录,用户所使用的shall。
groups查询指定用户属于哪个组,id 指定的组中包含哪些用户,finger+用户名,显示用户信息。
—a,添加。。—d,删除。
awk:流的编译器
awk '{print $0}’ 复制全部
awk '{print $1}’ 复制第一列
用-F 环境变量,默认是空格
FILENAME,当前输入文件的文件名
FNR 当前输入文件的记录数
FS 字段分隔符 (默认是空格,支持正则表达式来设定分隔符)
NF 当前记录的字段、
NR 在工作中的记录数
OFS 输出文件的分隔符
ORS 输出记录分隔字符(默认为换行 )
RS 输入记录分隔字符
BEGIN 用来执行初始化操作
END 结束代码快,用来输出
awk -F "[\t ]+" ‘{print $1 "\t"’$2}' /etc/fstab
支持特殊运算符
支持循环语句
函数:(自定义函数和系统自带函数)
%-d:左对齐修饰符
awk的操作符(按优先级升序排列)
= 、+=、 -=、 *= 、/= 、 %=
||
&&
> >= < <= == != ~ !~
xy (字符串连结,'x''y'变成"xy")
+ -
* / %
++ --
awk的函数
int(x) 对x取整
rand 取 0到1之间的随机数
srand(x) 设置x为rand的新输入值
cos(x) 给出x的余弦值
sin(x) 给出x的正弦值
atan2(x,y) 给出y/x的正切值
exp(x) 给出e的x次幂
log(x) 给出x的常用对数值(基为e)
sqrt(x) 给出x的正平方根值
exit(x) 结束awk程序,若有x值,则返回x,否则返回0.
index(s,t) 返回t在s中的第一个开始位置,如t不是s的子串,则返回Tansley
awk内置变量
变量名 含义
ARGC 命令行参数个数
ARGV 命令行参数数组
FILENAME string=当前输入的文件名
FNR 在当前文件中当前记录数(对输入文件起始为1)
FS 输入字段分隔符
NF 当前记录的字段数
NR 当前记录数(为全部输入文件)
OFMT 数值的输出格式(默认为%.6g)
OFS 输出字段的分隔符(默认为空格)
ORS 输出记录分隔符(默认为换行符)
RS 输入记录分隔符(默认为换行符)