shell脚本中的函数

变量、条件、循环、函数、数组、sed、awk

function - -> 函数

语法格式:
// 函数名
function_name (){
// 函数体,在函数中执行的命令行
commands…
// 参数返回,return语句可选的
// 如果使用return语句,后面跟的值0-255;
// 如果未使用,则以函数的最后一条命令的运行结果作为返回值。
return int:
}

function name {
   commands...
}

内函数中传递参数:
位置变量:
$0 :表示当前脚本的文件名
$# :表示多少个参数
$@ :表示所有的位置参数
$1 :表示第一个参数
$2 :表示第二个参数

pass(){
  a=$1
  echo $0
  echo $#
  echo $@
  echo $1
  echo $2
  echo $a
}

调用函数:
pass one two three

执行结果:
pass.sh
3
one two three
one
two
one

局部变量和全局变量:

a=1
  // a是全局变量
function a{
  b=2
  // 这里的b并不是局部变量,而是全局变量
  // 如果在函数体内定义局部变量;
  local  a=2
  local  b=3
  // local 命令将全局变量变为局部变量
  echo $b
  echo $a
}
a
echo $a
echo $b  // 结果为空,因为b是在函数体内定义的

系统变量: $FUNCNAME : 表示当前函数的名称

a(){
echo $FUNCNAME
}
b(){
echo $FUNCNAME
a
}
b
// 执行b函数的过程:
b(){
echo $FUNCNAME
a(){
echo $FUNCNAME
}
a
}
b

return:
// 如果使用return语句,后面跟的值0-255;
// 如果未使用,则以函数的最后一条命令的运行结果作为返回值。

检查一下某个进程是否存在?
checkpid(){
	local i
	// 定义了局部变量

	for i in $*
	do
	   [ -d “/proc/$i” ] && return 0
	done

	return 1	
}
	// 进程存在返回0  不存在返回1
checkpid  $pid1  $pid2
if [ $?  0 ];then
   echo “is running”
else
   echo “not running”
fi


/proc 目录 :虚拟目录,系统内存的映射
屏蔽主机的ping命令:
  # echo 1 >  /proc/sys/net/ipv4/icmp_echo_ignore_all

函数调用的几种特殊情况:
$$ :shell本身的PID,就是脚本运行的当前进程的ID号
$! :后台运行的最后一个进程的进程ID号

1.函数体中调用其他函数
2.将函数放入后台
3.递归调用函数,函数体内调用自己

fork炸弹:
.(){.|.&};.
:(){:|:&};:

.(){
	.|.&
}
.

awk:
提取本机网卡流量
积分区的剩余流量

语法结构:
awk 选项 ‘[条件]{指令]’ 文件
// 如果编辑多条指令,用;分割

cat tset.txt

hello the world
welcome to china

指令:print
// awk过滤文件的第2列
# awk ‘{print $2}’ test.txt
//输出磁盘的剩余空间
# df -h | awk ‘{print $4}’

注意:若未指定分隔符,默认将空格、制表符作为分隔符
	不光可以打印变量,还可以打印常量

选项:-f 可以指定分隔符

//输出/etc/passwd 中以:为分隔符的第一例和第七列
# awk -F:‘{print $1,$7}’ /etc/passwd
root /bin/bash
bin /sbin/nologin

awk内置变量:
$1 文本的第1列
$2 文本的第2列

以此类推
NR 文件当前行的行号
NF 文件当前的列数

提取网卡流量:
# ifconfig
PX packets … // 接收到数据量
TX packets … // 发送的数据量

# ifconfig etho | awk ‘/TX p/{print $5}’
2439674050

# df -h / | awk ‘/\//{print $4}’
   44G
# df -h / |tail -1 | awk ‘{print $4}’
   44G

# awk ‘/Failed/{print $11}’ /var/log/secure
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值