shell脚本编写时的必备命令之二(变量等)

一、文本处理命令——awk报告生成器(grep和sed在上篇文章中有说明)

1.awk 处理机制 :

awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式分别体现如下 :
BEGIN{ }: 读入第一行文本之前执行 , 一般用来初始化操作
{ }: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令
END{ }: 处理完最后一行文本之后执行 , 一般用来输出处理结果

2.awk基本用法:
awk -F : '{print $1}' passwd	  ##以:为分隔符,显示passwd的第一列(不指定分隔符时默认为空格)
awk -F : '{print $0}' passwd	  ##以:为分隔符,显示passwd所有内容(awk中$0表示所有内容)

在这里插入图片描述
在这里插入图片描述

awk -F : 'BEGIN{print "hello"}{print $1}' passwd
#以:为分隔符,显示passwd的第一列,并在处理文件之前显示hello

awk -F : 'BEGIN{print "hello"}{print $1}END{print "byebye"}' passwd
#以:为分隔符,显示passwd的第一列,并在开头显示hello,结尾显示byebye

在这里插入图片描述
在这里插入图片描述

awk -F : 'BEGIN{n=1}{print n++,$1}' passwd
#以:为分隔符,显示passwd的第一列,并从1开始显示行号

awk -F : 'BEGIN{n=1}{print n++,$1}END{print NR}' passwd
#以:为分隔符,显示passwd的第一列,并从1开始显示行号,并在结尾输出总行数

awk -F : 'BEGIN{n=1}{print n++,$1}END{print NF}' passwd
#以:为分隔符,显示passwd的第一列,并从1开始显示行号,并在结尾输出总列数

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

awk -F : 'NR==1{print $1}' passwd				##以:为分隔符,显示passwd的第一行第一列
awk -F : 'NR==1{print}' passwd					##以:为分隔符,显示passwd的第一行所有内容
awk -F : 'NR>=1&&NR<=3{print}' passwd 			##以:为分隔符,显示passwd第一行到第三行的所有内容
awk -F : 'NR==1||NR==3{print}' passwd			##以:为分隔符,显示passwd第一行和第三行的内容

在这里插入图片描述

awk  -F : '/bash/{print}' passwd	  		##显示passwd含有bash的行
awk  -F : '/bash/{print $1}' passwd 	  	##以:为分隔符,显示passwd含有bash行的第一列
awk  -F : '/bash$/{print}' passwd	  		##显示passwd中以bash结尾的行

在这里插入图片描述

awk 'BEGIN{A=34;print A+12}'				##显示34+12的结果(简单的四则运算)
awk 'BEGIN{A=34;print A-12}'				##显示34-12的结果
awk 'BEGIN{A=34;print A*2}'					##显示34*2的结果
awk 'BEGIN{A=34;print A/2}'					##显示34/2的结果

在这里插入图片描述

awk -F : '/^root/{print}' /etc/passwd
#以:为分隔符,显示出以root开头的行

awk '/^[a-d]/{print}' /etc/passwd 
#显示以a,b,c,d开头的行

awk '/^[^a-d]/{print}' /etc/passwd
#显示除了a-d开头的行

在这里插入图片描述

awk '/^r|bash$/{print}' /etc/passwd
#显示以r开头或者以bash结尾的行 或者 awk '/^r/||/bash$/{print}' /etc/passwd

在这里插入图片描述

awk -F : '$6~/bin$/{print $1 $6}' passwd
#以:为分隔符,显示第六列以bin结尾的行的第一列和第六列

在这里插入图片描述

awk -F : '$7!~/nologin$/{print $1,$7}' passwd
#以:为分隔符,显示除了第七列是以nologin结尾的行的第一列和第七列

在这里插入图片描述

二、shell 脚本中的基本知识

1.给shell脚本自动添加表头的设置
vim /etc/vimrc							##修改配置文件,在使用vim编写脚本时使其可以自动执行
#map <F9> ms:call WESTOS()<cr>'s		##进入文件后按<F9>快捷键添加,当设置自动添加时,注释此行使命令不生效
autocmd BufNewFile *.sh exec ":call WESTOS()"			##只要是创建以.sh结尾的文件都会自动调用函数WESTOS添加表头

function WESTOS()						##添加一个函数WESTOS
        call append(0,"##############################")
        call append(1,"# Author:                     #")
        call append(2,"# Create_Time:   ".strftime("%Y-%m-%d")."   #")
        call append(3,"# Version:                    #")
        call append(4,"# Mail:                       #")
        call append(5,"# Description:                #")
        call append(6,"#                             #")
        call append(7,"#                             #")
        call append(8,"#############################")
        call append(9,"")
        call append(10,"#!/bin/bash")
endfunction								##函数结束

在这里插入图片描述
在这里插入图片描述

2.脚本调试:
sh -x ip.sh  		##查看输出及执行过程

在这里插入图片描述

#脚本执行的几种方式:
#ps -f					##查看脚本运行的从属关系
sh /mnt/ip.sh			#直接执行脚本,在子shell中执行

chmod +x /mnt/ip.sh		#给脚本执行权限,以绝对路径文件名称直接运行脚本
/mnt/ip.sh				#在子shell中执行

#直接在当前shell执行脚本命令
source aa.sh		
. aa.sh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.脚本中的变量

(1)什么是变量?
##变量即在程序运行过程中它的值是允许改变的量,变量是用一串固定的字符来表示不固定的值的一种方法,变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可以被更改的程序信息
##在 shell 中变量是不能永久保存在系统中的,必须在文件中声明才可以长久保存

(2)变量的种类:
##在 shell 中变量分为环境级变量,用户级变量,系统级变量
环境级变量:只在当前 shell 中生效, shell 关闭后变量丢失
用户级变量:写在用户的骨文件中,只针对当前用户生效
系统级变量:被写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效

(3)变量定义的方法:

#env				显示环境中所有变量
export a=1			##环境级变量,退出当前环境后设定失效
vim ~/.bashrc		##用户级变量,只对当前用户生效
vim /etc/profile	##系统级,全局的,对于所有用户都生效,/etc/bashrc
##系统级和用户级定义同一个变量时,先读取系统级设定,后读取用户级设定,所以最终显示的是用户级设定变量

#环境级设置:
在这里插入图片描述
在这里插入图片描述
#用户级设置:
在这里插入图片描述
在这里插入图片描述
#系统级设置:
在这里插入图片描述
在这里插入图片描述

(4)变量名称的规范书写:
#变量名称中通常包含大小写字字母,数字,下划线(不是必须的),常见的变量书写格式如下:

变量名称格式
WESTOS_LINUX
Westos_Linux
westoS_Linux

(5)字符的转译及变量的声明
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,一般需要转译成普通字符使用

\			##转译单个字符
""			##弱引用,不能引用! \ $ `
''			##强引用,可以引用所有字符串
${}			##变量声明

在这里插入图片描述
在这里插入图片描述
(6)变量值传递:

$0			##文件的绝对路径及文件名称
$1			##脚本后的第一串字符
$2			##脚本后的第二串字符
$3			##脚本后的第三串字符
$#			##脚本后所根字符串个数
$*			##脚本后跟的所有字符串,模式为“1 2 3”,只有一个输出
$@			##脚本后跟的所有字符串,模式为“1”“2”“3”,相同输入会有好几个输出
$$			##显示正在运行脚本的PID

在这里插入图片描述
在这里插入图片描述
(7)用read实现变量传递(交互式脚本)

read -p "你瞅啥:" -s TARGET	##-p脚本执行会看到这个交互语言,-s加密让交互的输入不可见
echo $TARGET

在这里插入图片描述
在这里插入图片描述
(8)命令别名的设定(与之前的变量定义大致相同,此处不再赘述):

alias xie='vim'		##当前环境中生效,退出后失效,xie与vim效果相同
unalias xie='vim'	##取消命令别名设置
vim ~/.bashrc		##当前用户生效,切换用户后失效,xie与vim相同
source ~/.bashrc	##读取文件设定

vim /etc/bashrc		##系统级生效,切换用户不加-时也生效
					##/etc/profile,-读取环境设定时才会生效

在这里插入图片描述
(9)利用命令执行结果设定变量

$? 是命令在执行完成之后产生的退出值,范围是 [0-255],这里列举几个常用的参数:
0                命令成功结束
1                通用未知错误
2                误用shell命令
126              命令不可执行
127              没找到命令
128              无效退出参
当 $?=0 时表示命令执行没有错误输出
而且这个值可以用 exit 命令执行 .
例如 exit 66

在这里插入图片描述
(10)脚本中的函数:
脚本中的函数时把一个复杂的语句块定义成一个字符串的方法

#!/bin/bash
ACTION()
{
	read -p "please input a word: " WORD
	[ "$WORD" = "exit" -o "$WORD" = "EXIT" ]&& {
		echo bye
		exit 0
	}||{
		echo $WORD
	}

	ACTION
}
ACTION				##ACTION就是上面一段程序的函数,在当前脚本中使用这个字符串就是使用这段程序

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值