shell-4

shell中的函数

  • 函数就是把一段代码整理到一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。

  • 格式

function f_name(){    //f_name是函数名字
      command 
      } 

函数必须要放在最前面,在写脚本时,可以省略function
示例:打印参数

#!/bin/bash
inp(){
  echo "The first par is  $1"
  echo "The second par is  $2"
  echo "The third par is  $3"
  echo "the scripts par is $0"
  echo "the number for par is  $#"
  } 
  inp $1 $2 $3  //定义脚本参数
 [root@zcy-1 sbin]# cat inp.sh 
#!/bin/bash
inp(){
  echo "The first par is  $1"
  echo "The second par is  $2"
  echo "The third par is  $3"
  echo "the scripts par is $0"
  echo "the numberpar is  $#"
  } 
  inp  $1  $2  $3 
[root@zcy-1 sbin]# 
[root@zcy-1 sbin]# sh inp.sh  2
The first par is  2
The second par is  
The third par is  
the scripts par is inp.sh
the numberpar is  1
[root@zcy-1 sbin]# sh inp.sh  3  1
The first par is  3
The second par is  1
The third par is  
the scripts par is inp.sh
the numberpar is  2
[root@zcy-1 sbin]# 

-案例2 定义加法的函数

[root@zcy-1 sbin]# cat 11.sh 
#!/bin/bash
sum() {
  s=$[$1+$2] /s指变量
  echo $s
}
 sum 1 7
[root@zcy-1 sbin]# sh -x 11.sh 
+ sum 1 7
+ s=8
+ echo 8
8
[root@zcy-1 sbin]# sh  11.sh 
8
  • 案例 显示网卡的IP地址
#!/bin/bash
ip(){
    ifconfig |grep -A1 "$1" |grep 'inet' |awk '{print $2}'
     }
     read -p "Please input the ens name:" ens
     ip $ens

拆分解析

[root@zcy-1 shell]# ifconfig |grep -A1 "ens"
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.244.136  netmask 255.255.255.0  broadcast 192.168.244.255
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.202.139  netmask 255.255.255.0  broadcast 192.168.202.255
[root@zcy-1 shell]# 
[root@zcy-1 shell]# ifconfig |grep -A1 "ens" |grep 'inet' 
        inet 192.168.244.136  netmask 255.255.255.0  broadcast 192.168.244.255
        inet 192.168.202.139  netmask 255.255.255.0  broadcast 192.168.202.255
[root@zcy-1 shell]# 
[root@zcy-1 shell]# ifconfig |grep -A1 "ens" |grep 'inet' |awk '{print $2}'
192.168.244.136
192.168.202.139
[root@zcy-1 shell]# 
[root@zcy-1 shell]# 

执行结果

[root@zcy-1 shell]# sh -x fun1.sh 
+ read -p 'Please input the ens name:' ens
Please input the ens name:ens
+ ip ens
+ ifconfig
+ grep -A1 ens
+ grep inet
+ awk '{print $2}'
192.168.244.136
192.168.202.139
[root@zcy-1 shell]# 

shell中的数组 ##

  • 数组就是一串字符串或者一串数字形成的变量,把这个变量叫做数组,那么就可以针对数组进行一些操作。数组很有用,但是使用场景不多。

  • 定义数组a=(1 2 3 4 5) ; echo ${a[@]}
    例:

[root@zcy-1 shell]# b=(1 3 5)
[root@zcy-1 shell]# echo $b 
1
[root@zcy-1 shell]# echo ${b[@]} /[ ] 里面也可以使用*
1 3 5
[root@zcy-1 shell]# 
  • 查看数组中某一个元素的值,默认从0开始
[root@zcy-1 shell]# b=(1 2 3)
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${b[2]}
3
[root@zcy-1 shell]# echo ${b[0]}
1
[root@zcy-1 shell]# 
  • 获取数组的元素个数
[root@zcy-1 shell]# b=(1 2 3)
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${#b[@]}
3
[root@zcy-1 shell]# b=(1 2 3 4 5)
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${#b[@]}
5
[root@zcy-1 shell]# 
  • echo ${b[*]} 等同于 ${b[@]}显示整个数组
[root@zcy-1 shell]# b=(1 2 3 4 5)
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${#b[@]}
5
[root@zcy-1 shell]# echo ${#b[*]}
5
[root@zcy-1 shell]# 

数组赋值

针对其中一个元素进行赋值

[root@zcy-1 shell]# b[4]=10
[root@zcy-1 shell]# echo ${b[@]}
1 2 3 4 10
[root@zcy-1 shell]# b[5]=adc
[root@zcy-1 shell]# echo ${b[@]}
1 2 3 4 10 adc
[root@zcy-1 shell]# 

如果下标不存在则会自动添加一个元素

  • 数元素的删除
[root@zcy-1 shell]# echo ${b[@]}
1 2 3 4 10 adc
[root@zcy-1 shell]# 
[root@zcy-1 shell]# unset b[2]  //删除第3个元素,默认从0开始的
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${b[@]}
1 2 4 10 adc
[root@zcy-1 shell]# 

清空数组的值

[root@zcy-1 shell]# echo ${b[@]}
1 2 4 10 adc
[root@zcy-1 shell]# 
[root@zcy-1 shell]# unset b 
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${b[@]}

[root@zcy-1 shell]# 

数组的分片

在一些特殊需求下还是很有可能用到的

数组赋值的另一个方式

[root@zcy-1 shell]# a=(`seq 1 10`)
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]# 

数组分片

[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${a[@]:0:3}  //从第一个元素开始,截取3个
1 2 3  
[root@zcy-1 shell]# echo ${a[@]:2:5}  //从第三个元素开始,截取5个
3 4 5 6 7
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${a[@]:0-4:3}  //从倒数第4个元素开始,截取3个
7 8 9
[root@zcy-1 shell]# 

数组的替换

echo ${a[@]/4/20} //其中4是被替换的值,100是替换后的值
[root@zcy-1 shell]# echo ${a[@]/4/20}
1 2 3 20 5 6 7 8 9 10
[root@zcy-1 shell]# 

还可以直接赋值,需要注意加上()

[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]# 
[root@zcy-1 shell]# a=(${a[@]/4/11})
[root@zcy-1 shell]# 
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 11 5 6 7 8 9 10
[root@zcy-1 shell]# 

猜你喜欢

转载自blog.csdn.net/chunyang315/article/details/80024378