Shell函数,Shell数组,变量替换

定义函数

function 函数名 {

函数的功能体

......

函数名(){

函数的功能体

......

如何调用函数

函数名

函数的使用规则?

1)先定义后调用,可以只定义不调用

2)定义放上面,调用放下面

3)函数名区分大小写

4)函数名相同,后定义的生效

5)函数名不准使用特殊符号和关健字

6)在函数体内定义的变量叫局部变量,只能在当前函数内使用

7)在函数体外定义的变量叫全局变量

8)在第二个函数里敲上第一个函数的函数名,这样可以调用第一个函数的变量

#!/bin/bash

pri() {

echo "Hello"

}

pri

函数传值

pri(){

echo $#

echo $*

echo $1

echo $2

}

pri 20 40

#!/bin/bash

sum_two(){

sum=`expr 2 +3`

echo "1 + 2 = $sum "

}

sum_two #只能计算2+3的和

函数递归调用

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

分析

1 .()

2 {

3 .|.&

4 }

5 ;

6 .

数组:

用一个变量存储一组数据,并且能够对这组数据中的某个数据单独操作

数组类型: 一维数组 二维数组 多维数组

*

declare 定义变量时指定变量的类型,默认变量的类型都是字符类型的

格式1

declare 选项 变量名

变量名=值

格式2

declare 选项 变量名=值

选项

-i 整数变量

-x 环境变量

-r 只读变量,定义的变量名不允许再修改

-a 数组变量

例1:

declare -i a=10 b=20

declare -i c=a*b

echo c

例2:

declare -r name=wsyht

name=peter

例3:

declare -a array   #定义数组

declare -a | grep array #查看数组

array=(jim tom jerry lucy)      #定义数组元素

echo ${array[1]} #输出数组元素

array[4]=yht #如果元素下标值没有被已有元素使用,是向数组中添加新元素

array[1]=tom #如果元素下标值已被已有元素使用,是修改已有元素的值

array=() #如果给数值赋值时,元素列表为空,是删除数组中的所有元素

array=(baidu 163 360) #如果给数组赋值时,元素列表里输入新值,是重新给数组[0][1][2]赋值

显示定义数组 declare -a 数组名

给数组变量赋值的方式:

方法1

数组名=(数组元素列表)

array=(jim tom jerry lucy)     #定义数组元素

方法2

数组名[元素下标]=值

array[4]=yht

使用数组元素

${数组名[元素下标]}

echo ${array[1]}

操作数组元素相关的命令

输出数组里的所有元素

echo ${host[@]}

echo ${host[*]}

输出数组元素个数

echo ${#host[@]}

echo ${#host[*]}

输出连续的某几个数组元素

num=(a b c d e f g h i j k)

echo ${num[@]:3}    #从下标是3的元素开始显示,后面不写,表示默认显示到最后

echo ${num[@]:3:5}  #从下标是3的开始显示,显示5个

echo ${num[@]:3:}   #从第三个开始显示,显示0个

echo ${#host[0]}   #输出元素下标为0的元素个数

输出某个数值的一部分

echo ${host[0]}    #输出某个元素的值

www.baidu.com

echo ${host[0]:3}   #从数组元素值的和四个字符开始显示,显示到末尾,

.baidu.com

echo ${host[0]:0}  #从第一个字符开始显示,一直显示到最后

www.baidu.com

echo ${host[0]:0:3} #从第一个字符开始显示,共显示3个字符

.baid

输出数组元素

输出某个数组元素的长度

- echo ${数组名字[下标]}

输出数组元素值的一部分

- echo  $(#数组名[下标]:起始:字符数)

例子

server=(www.baidu.com www.163.com)

echo $(#server[@])

echo $(#server[1])

wall "error" 向所有终端发警告信息,双引号里注明的是警告信息

Shell的变量替换(改变变量赋值的方式)

$(变量名 变量替换符 用户自定义字串)

:-

如果name存在且非null 则返回其值;否则返回word

用途:如果变量没定义,反回默认值

例:

#name=tom

#echo $name

tom

#y=$(name:-plj)

#echo $y

tom

#unset name

#y=${name:-plj}

$echo $y

plj

:=

$(name:=word)

如果name存在且非null则返回他的值;否则设置他为word并返回其值

用途:如果变量没定义,则给变量赋值

例:

#x=$(name:=100)

#echo $x

100

#echo $name

100

#name=200

#x=${name:=100}

#echo $x

200

:+

如果name存在且非null,则返回word;否则返回null

用途:测试变量是否定义

#name=jim

#echo $name

#a=${name:=is ok}

#echo $a

is ok

#unset name

#a=${name:=is ok}

#echo $a

:?

$(name:?word)

如果name存在且非null则返回他的值;否则显示name:word并退出当前的命令或脚本

若省略word则显示name:parameter null or not set

用途:捕捉由于变量未定义所导致的错误

#name=plj

#echo $(name:?undefined)

pkj

#unset name

#echo $(name:?undefined)

bash:name:undefined

#echo $(name:?)

bash:name:parameter null or not set

number=$(n:=100)

:-

:+

:?

获取普通变量值的一部分数据

${变量名 替换符号 被替换的源数据表达式}

# 从左向右最短匹配删除,返回删除后剩下的数据

例:

#echo MAIL

/var/spool/mail/root

#mailidir=${MAIL#*/}

#echo $maildir            //最短匹配,匹配到第一个/

var/spool/mail/root

## 从左向右最长匹配删除,返回删除后剩下的数据

例:

#echo $MAIL

/var/spool/mail/root

#echo ${MAIL##*/}        //最长匹配,匹配到最后一个/

root

#maildir=${MAIL##*/}

echo $maildir

root

% 从右向左最短匹配删除,返回删除后剩下的数据

例:

#echo $MAIL

/var/spool/mail/root

#maildir=$(MAIL%r*)

#echo $maildir

/var/spool/mail/

%% 从右向左最长匹配删除,返回删除后剩下的数据

例:

#echo $MAIL

/var/spool/mail/root

#maildir=${MAIL%%/*}

echo $maildir

时间: 2024-10-12 20:58:59

Shell函数,Shell数组,变量替换的相关文章

shell函数和数组

[toc] shell函数和数组 一.shell中的函数 1.1 函数格式1 function name { commands } 示例1: #! /bin/bash function inp(){ //定义一个inp的函数 echo $1 $2 $3 $0 $# } inp 1 a 2 b //传入参数 //传入参数 运行结果 [[email protected] ~]# sh function1.sh 1 a 2 function1.sh 4 [ ] $1 : 第一个参数 就是如上的"2&q

shell 函数 返回数组

shell 函数 返回数组,布布扣,bubuko.com

shell - 函数、数组定义与调用

#!/bin/bash # returning an array value function arraydblr() { local origarray local newarray local elements local i origarray=(`echo "[email protected]"`) newarrray=(`echo "[email protected]"`) elements=$[ $# -1 ] for((i=0;i<=$eleme

linux基础学习第十二天(shell函数、数组以及yum使用及编译安装)

2016-08-18 授课内容: shell编程基础(select 循环与菜单.函数) yum管理.定制yum仓库 select 循环与菜单 select variable in list do 循环体命令 done 1.select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符(默认是#?),可以重新定义PS3,等待用户输入 2.用户输入菜单列表中的某个数字,执行相应的命令,用户输入被保存在内置变量REPLY 中 [19:45 [email protec

Shell函数与数组

1.什么是函数 被命名的语句块儿:有开始和结束的边界; begin ...... end 2.Shell语句中的语句块儿 (1).(语句1:语句2:...) (2).{语句1:语句2:...} (3).if else elif while for (4).被命名的语句块儿,函数: 3.Shell函数的定义 函数的要素:(1).函数名称 (2).语句块儿 (3).返回值 (4).参数 Shell函数定义2种基本格式: (1) function 函数名称(){ $1 //若干语句 } 返回值类型:是

2018-4-20 17周3次课 shell函数、数组、告警需求分析

20.16/20.17 shell中的函数 ·函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function f_name() { command } 函数必须要放在最前面 ·示例1 #!/bin/bash input() {                        ##定义f_name最好不要和shell里面的关键词冲突     echo $1 $2 $# $0 } input 1 a b $1 $2 第一个,第

Shell 函数、数组与正则表达式

防伪码:白日依山尽,黄河入海流. 5.1  函数 格式: func() { command } 示例 1: #!/bin/bash func() { echo "This is a function." } func # bash test.sh This is a function. Shell 函数很简单,函数名后跟双括号,再跟双大括号.通过函数名直接调用,不加小括号. 示例 2:函数返回值 #!/bin/bash func() { VAR=$((1+1)) return $VAR

第五章 Shell函数与数组

5.1 函数 格式: func() {     command } 示例1: #!/bin/bash func() {     echo "This is a function." } func # bash test.sh This is a function. Shell函数很简单,函数名后跟双括号,再跟双大括号.通过函数名直接调用,不加小括号. 示例2:函数返回值 #!/bin/bash func() {     VAR=$((1+1))     return $VAR     

linux--shift命令-shell函数-shell脚本实战

•     将windows中的脚本导入到Linux系统后执行报错•     Shift参数左移指令•     shell中函数使用方法•     shell脚本实战:mysql自动备份和自动解压ZIP 文件脚本 将windows中的脚本导入到Linux系统后执行报错linux与windows换行符问题使用dos2unix 工具    dos2unix Filename================================================================