shell脚本变量,数组与函数

本文详细介绍了Shell脚本中的变量、数组和函数的使用。包括变量的定义、作用域,数组的定义、操作以及函数的定义、调用和返回值。还讨论了如何处理函数参数,以及函数库的使用,提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)变量
(1)变量的定义
##等号两边不能有空格
value=123
value="jing"
declare -i value=100
(3)变量的作用域
  • 局部变量
    • 需要使用local 定义
  • 全局变量

例如:

#! /bin/bash

func()
{
    echo "global v1 is $v1" #输出200全局变量
    local v1=100 #局部变量只在函数内有效
    echo local v1 is $v1  #输出100
}
vi=200
func
echo global v1 is $v1  #输出200
(3)系统变量

但对脚本进行传参时,参数的值存放在系统变量中。

  • $* 以“参数1” ”参数2“ “参数3”….的形式返回
  • $#
  • $@ 以“参数1 参数2 参数3….” 的形式返回
  • $num num是数字,代表第num个参数
  • $? 前一个命令或者函数的状态码
  • $$ 返回本进程的ID
(二)数组
(1)定义数组
  • 直接定义
    • arr[0]=”jing”
    • arr[1]=”ti”
  • declare
    • declare -a arr
  • 元素值集合
    • arr=(v0 v1 v2 ….)
  • 通过键值
    • arr=([0]=”one” [1]=”two” ….)
(2)获取数组长度 ${#arr[@]}
(3)获取所有元素 ${arr[@]}
(4)截取部分元素 ${arr[@]:start:length}
(5)替换数组元素的值 ${arr[@]/val/replace}
(6)删除数组以及元素 unset arr,unset arr[n]
(7)赋值数组 newarr=(“${arr[@]}”)
(8)链接数组newarr=(“ arr1[@]"" {arr2[@]}”)两数组中间有空格。
(8)加载文件内容到数组arr=($(cat “filename”))
(三)函数
(1)函数的定义
function function_name()
{
    statement 
    ...
}

function_name()
{
    statement 
    ...
}
(2)函数的调用
function_name 参数1 参数2 .....
(3)返回值 可以用return返回,但是只能返回0-255之间的数。

例如:

#! /bin/bash

func()
{
    val=$((11+22))
    return $val
}
func 
echo $? #系统变量获得返回值
(4)函数的参数

例如:

#! /bin/bash

func()
{
    val=$(($1+$2)) #如果函数参数超过9时,要使用$(10)才行
    return $val
}
func 22 33  #传递参数
echo $? #系统变量获得返回值

如果参数太多可以使用shift移动参数,其功能是将参数向左边移动一位,同时删除原来的第一个参数,因此没次shift一次$#就减去1。
例如:

#! /bin/bash
func()
{
    while (($# > 0))
    do
        echo $(1)
        shift
    done    
}
func  0 1 2 3 5 6 7 8 9 10  #传递参数

有时候参数太多并需要分情况,这时候单纯的传参就不能满足需求了。此时需要另外一个函数来获得参数getopts().
一般形式:getopts optstring args
【optstring】形如”a:b:c” 如果字母后面跟冒号则说明可以为该选项提供参数值。同时该参数值保存到系统变量$OPTARGS中。

例如:

 #! /bin/bash

 func()
 {
     while getopts "a:b:c" args
     do
         case $args in
             a)
                 echo a‘s argument is $OPTARG
                 ;;
             b)
                 echo b‘s argument is $OPTARG
                 ;;
             *)
                 echo "having no argument "
                 ;;
         esac
     done
 }
 func -a hello -b world
输出为:
a‘s argument is hello
b‘s argument is world
(5)函数库文件的使用,使得代码可以重用

例如test1.sh:

#! /bin/bash
fun()
{
    if [ $1 -gt $2 ]
    then
        return $1
    else
    {
        return $2
    }
    fi
}     

这个脚本函数是比较两个数的大小,在另一个脚本中调用这个这个函数:

#! /bin/bash
. test.sh #加入库文件
fun 44 22 #直接调用函数
echo $? 

一般吧脚本文件放入一个固定的区域,当调用时使用相对路径或者是绝路径才能笑到脚本库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值