Linux学习总结(六十)shell脚本4-函数及数组

一 shell 中的函数

1 先了解脚本的几个系统变量

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
[email protected] 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

2 函数的定义及用法
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式: function f_name() { command }函数必须要放在最前面,其中关键字function可以省略
示例1

vim 6.sh
#!/bin/bash
input() {
    echo $1 $2 $# $0
}
input 4 4 4 4 4

执行结果为: 4 4 5 6.sh
$1 $2 标示传递个shell脚本的第一个,第二个参数
$# 标示传递给脚本的参数个数
$0 是脚本本身的名字
示例2

#!/bin/bash
sum()
{
s=$[$1+$2]
echo $s
}
sum 1 2

如果要在脚本外面传入参数,sum 1 2 可以改为sum $1 $2,然后执行脚本时带上参数,比如 sh sum.sh 1 2
示例3
需求,写一个脚本,给出网卡名称,就能显示对应的ip地址
脚本调试
ifconfig |grep ens33 -A1 |grep ‘inet‘ |awk ‘{print $2}‘
各段含义:
ifconfig 不用说了,可以查看网卡相关信息
grep enss3 -A1 过滤出含有网卡名称ens33 的行,并顺带打印其下一行。也就是我们需要的ip地址行
grep ‘inet‘ 找出还有ip地址的行,这里可以使用tail -1代替
awk ‘{print $2}‘ 打印ip地址行的第二段,也就是ip地址了,awk不指定分隔符,默认以空格或者tab分割。也就是以空字符分割。
最终结果

#!/bin/bash
ip()
{
ifconfig |grep "$1: " -A1 |grep ‘inet‘ |awk ‘{print $2}‘
}
read -p "please input a name of network card: " name
ip $name

备注:grep命令后面的$1表示函数传递的第一个参数,一定要用双引号。
对上面脚本做一个完善,
1 判断该网卡名是否为系统里的网卡,不是给出提示
2 判断该网卡是否分配了ip地址,没有给出提示

#!/bin/bash
ip()
{
ifconfig |grep "$1: " -A1 |grep ‘inet‘|awk ‘{print $2}‘
}
read -p "please input a name of network card: " name
ip $name
n=`ifconfig |grep "$name"`
if [ -z "$n" ];then
    echo "the eth is not exist"
fi
m=`ifconfig |grep "$name" -A1 |grep ‘inet‘`
if [ -z "$m" ];then
    echo "the eth has no ip assigned"
fi

二 shell中的数组

定义数组 a=(1 2 3 4 5)
echo ${a[@]} // 显示整个数组,等价于echo ${a[*]}
echo ${#a[@]} 获取数组的元素个数
echo ${a[2]} 读取第三个元素,数组元素编号从0开始
数组赋值
a[1]=100; echo ${a[@]}
a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素
数组的删除
unset a[1] ;echo ${a[*]} //删除数组中第1个元素
unset a;echo ${a[*]} //清空数组
数组分片
a=(`seq 1 5`)
echo ${a[@]:0:3} 从第一个元素开始,截取3个
echo ${a[@]:1:4} 从第二个元素开始,截取4个
echo ${a[@]:0-3:2} 从倒数第3个元素开始,依次向后截取2个
数组替换
echo ${a[@]/3/100} //将数组a中的3替换成100(只显示到屏幕,并不更改数组)
a=(${a[@]/3/100}) //将数组a中的3替换成100 ( 更改数组)

原文地址:http://blog.51cto.com/12606610/2126691

时间: 2024-10-09 03:59:36

Linux学习总结(六十)shell脚本4-函数及数组的相关文章

Linux学习第九节课-shell脚本编程

Linux第九节课 -------------------------------------------------------------------------------------------------------------------------------- 程序:算法+数据结构 数据:程序的核心 算法:处理数据的方式 程序编程风格 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 高级编程语言 编译:高级语言→编译器→机器代码→执行,例如c,c++等

Linux学习记录(四):Shell脚本

目录 Shell脚本是什么 如何运行Shell脚本 Shell脚本的一些简单语法 Shell脚本 Shell脚本(Shell script),是一种为shell编写的脚本程序.我们所说的shell通常是指shell脚本. 在终端中输入很多命令,我们想把这些命令写到一个文件中去,这时Shell就派上用场了. 如何运行Shell脚本 现有test.sh脚本如下: #!/bin/bash echo "Hello World" 方法一: 方法二: sh test.sh拓展名为sh,那么用sh解

Linux学习第六节课-用户、组合权限

Linux学习第六节课 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 三十四.安全3A 认证Authentication 授权Authorization 审计Accounting 三十五.用户和组的配置文件 /etc/pas

linux学习第六周总结

linux学习第六周总结 本周共学习4项内容,简单总结一下 shell脚本编程进阶 系统启动和内核管理 selinux 文本处理三剑客之awk 一.shell脚本进阶 编程中的逻辑处理: 顺序执行选择执行循环执行 循环执行 将某代码段重复运行多次重复运行多少次循环次数事先已知循环次数事先未知有进入条件和退出条件r, while, until for循环for 变量名 in 列表;do循环体done执行机制:依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一循环体; 直到列表中的元

linux c程序中获取shell脚本输出的实现方法

linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

Linux之进程管理及Shell脚本

使用!来调用过往命令 !! 重复执行上一条指令 !a 重复执行上一条以a为首的指令 !nubmer 重复执行上一条在history表中记录号码为number的指令 !-number重复执行前第number条指令 ailas abc='cd xxxxxxxxxxx/xxxxxxxx/xxxxxxxxxxxxx' unalias abc " "将一串字符当成字符串来看,可以转译特殊字符 ' '将一串字符当成字符串来看,无法转译特殊字符 ·能够返回命令执行的结果 echo `uname -a

二. 第六单元.shell脚本命令

###########################二. 第六单元.shell脚本命令############################# 1.diff diff        file file1            ##比较两个文件的不同        -c                        ##显示周围的行        -u                        ##按照一定格式统一输出生成补丁        -r                      

Linux自动安装JDK的shell脚本

Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在A上运行本脚本: $ ./install-jdk.sh B的IP or: $ ./install-jdk.sh "B的IP" "JDK的URI" 就可以在机器B上安装JDK.jdk使用的tar包需要用户自己设定DEFAULT_JDK_SRC=?,保证可以wget得到即可

linux学习之路之使用脚本来复制二进制程序和所需的库文件

首先介绍bash的特殊语法 ${parameter#*word} 其中parameter为变量,word为分隔符,表示从变量最边左字符开始到第一匹配到分隔符(word)之间的字符串都去掉 ${parameter##*word}:表示从变量最左边字符开始到最后一次匹配到该分隔符之间的字符串都去掉 注意:其中变量不要加$符号 当*在分隔符(word)前面时,表示从左开始匹配 当*在分隔符(word)后面时,表示从右开始匹配 ${parameter%word*}:表示从最右边字符开始到第一次匹配到的分