运维学习之脚本命令架构基础
shell script
1.什么是脚本
安装一定逻辑关系记录命令的文件
在此文件有可执行权限的情况下可以用文件名称发起脚本内记录命令的执行
shell脚本是一种解释性语言,文件内记录的动作需要解释器shell
2.如何建立一个脚本
1)vim test.sh
#一般情况下脚本的结尾为".sh"这不是系统规定,但是是业界的规范
2)
#!/bin/bash
脚本头的写法,这是脚本使用的解释器,也就是默认脚本运行时开启的子shell
3)
脚本内容是用命令和命令执行的逻辑关系组成
4)
脚本执行的方式
方法一:
sh 脚本名称
方法二:
chmod +x 脚本
脚本名称调用
3.编写脚本的规范
1)脚本中应添加脚本的说明信息
Author :lee
Email :[email protected]
Create_date :2017-08-21
Vesion :1.0
Description :test scripts
2)脚本中尽量不要使用中文,可用拼音代替
3)脚本中出现的()|[]|{}|<>等等成对出现的符号要一次打出,且内容中的字符要与这些符号有空格
4)脚本中的语句要一次写完再丰富内容
5)语句和宗使用的动作要缩进写入,使脚本易读
6)让vim自动添加脚本说明
map <F4> ms:call AddTitle()<cr>'s
function AddTitle()
call append(0,"#!/bin/bash")
call append(1,"# Author :Lee")
call append(2,"# Email :[email protected]")
call append(3,"# Version :")
call append(4,"# Create_Date :".strftime("%Y-%m-%d"))
call append(5,"# Description :")
vim /etc/vimrc
1)diff
比较两个文件的不同
diff
[num1,num2][a|c|d][num3,num4]
a 添加
c 改变
d 删除
num1,num2 第一个文件的内容
num3,num4 第二个文件的内容
创建两个文件file和file1,用命令进行对比。file在前时显示2比1少了123,file1在前时显示1比2多了123
vimdiff进行对比
diff -r /mnt/westos /mnt/linux
diff -u file file1 > file.path
patch file file.path
patch -b file file.path #-b表示备份原文件为file.orig
2)grep
grep -n #显示过滤内容所在的行
-n3 #显示过滤内容的前后三行
-A3 #前三
-B3 #后三
-i #不管大小写
-v #反向过滤
-E #匹配多个条件
^test #以字符开头
test$ #以字符结尾
"\<test" #只匹配test字符在前且无后缀
"test\>" #只匹配test在后且无前缀
下文最后过滤前后三行的命令有误,n和3应该连在一起
过滤root,不区分大小写
过滤root在最前或者在最后,结合使用过滤root在中间
只匹配root字符在前且无多余部分,结合使用匹配root字符在中间且前后无多余部分
3)cut
cut -c 1-4|1,4 每列1-4个字符,1和4列的字符
cut -d : -f 1,7 | -f 1-3 以:为分隔符,1和7列,1至7列
grep和cut结合使用过滤掉/etc/passwd关键字所在的行然后截取以:为界的第一串字符
通过结合命令查找eth0网卡的IP并显示出来
4)awk
TEST="###########################"
awk -F 分隔符 -v TEST=$TEST 'BEGIN {print TEST } {print $2} END{print TEST}'
awk -F ":" -v TEST=$TEST 'BEGIN {print TEST ":" } {print $2} END{print TEST}'
echo -n
-e
-e "\r \r"
10秒倒计时
6)sed
sed 's/sbin/westos' passwd
sed '1,5s/sbin/westos/g' passwd
sed '/lp/,/shutdown/s/sbin/westos/g' passwd
sed -e 's/sbin/westos'
6.sed ##控制流输出
sed 's/nologin/westos/g' passwd ##替换输出中的nologin为westos
sed '1,5s/nologin/westos/g' passwd ##替换输出中1-5行的nologin为wesots
sed '/games/,/nobody/s/nologin/westos/g' passwd ##替换输出中的games字符到nobody字符之间的nologin为westos
sed -e 's/nologin/westos/g' -e 's/sbin/lee/g' passwd ##多条替换策略用-e连接
sed 3d passwd ##不显示文件中的第三行
sed 3,7d file ##不显示文件中的3-7行
sed 3,7p file ##重复显示文件中的3-7行
sed -n 3,7p file ##只显示文件中的3-7行
[[email protected] mnt]# cat rule ##规则文件内容
s/nologin/westos/g
s/sbin/lee/g
[[email protected] mnt]# sed -f rule file ##使用规则文件更改输出
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/lee/westos
3 daemon:x:2:2:daemon:/lee:/lee/westos
4 adm:x:3:4:adm:/var/adm:/lee/westos
5.变量
1)作用
env查看变量
2)变量的命令规则
首字母不能是数字,变量中只能包含字母数字和下划线
TEST
TEST_REDHAT
Test_Redhat
3)变量设定方式
环境级
在当前环境生效,当前环境关闭,变量失效
export A=1
用户级
只针对配置过的用户生效,其他用户无法使用
vim /root/.bash_profile
export A=1
source /root/.bash_profile
系统级
4)命令别名设定
alias xie='vim'
vim ~/.bashrc
alias xie='vim'
vim /etc/bashrc
alias xie='vim'
unalias xie
5)变量定义方式
USER=root
变量定义测试
6)shell脚本中函数的定义
TEST()
{
echo hello world
}
TEST
7)变量对比
test=[]
eq =
ne !=
gt >
lt <
le <=
ge >=
8)特殊符号转译与注释
''强引用
“”弱引用 其转译功能不能转译“!” “$” "\" "`"
\转译单个字符
脚本内容如下
9)变量的声明
a=1
$ab=空
${a}b=1b
6.四则运算
1.运算法则
++ i++ i=i+1
-- i-- i=i-1
+= j+=i j=j+i
-= j-=i j=j-i
+
-
*
/
**
%
$[ 3+2 ]
let A=3+2
expr 3+2
用运算命令计算
1.
for
do
done
2.
while
do
done
3.
if
then
elif
then
else
fi
4.
case
5
.expect
10秒倒计时
break和exit的等级对比
1分10秒倒计时
字符反写
文件属性匹配
用用户文件和密码文件进行匹配的方式创建新用户
转载于:https://blog.51cto.com/13132406/1958774