Shell编程之循环语句与函数

循环

        for循环语句

                格式

                        for 变量名 in 取值列表

                        do

                                 命令序列

                        done

for i in kc01 kc02 kc03 kc04 kc05
do
        echo " hello $i"
done
for i in $(seq 1 5)
do
        echo " hello $i"
done   

        while语句结构

                重复测试某个条件,只要条件成立则反复执行

                结构

                        while 条件测试操作

                        do

                                命令序列

                        done

#免交互式设置密码
                echo "123" | passwd --stdin $username

        循环控制

                break:满足条件退出

                continue:满足条件退出一次循环

untill

        重复测试某个条件,只要条件不成立则反复执行

https://blog.csdn.net/qq_33906471/article/details/139678190?spm=1001.2014.3001.5502

函数

        后台执行,与并发

{
ping -c 1 -w 1 192.168.27.$i &> /dev/null
if [ $? -eq 0 ]
then
    echo "192.168.27.$i 存活"
else
    echo "不存活"
fi
done

#这段代码会在后台执行
} &


#并发,等待一个或多个在后台运行的进程,并返回其终止状态
wait    
~      

        详细操作https://blog.csdn.net/qq_33906471/article/details/139740050?spm=1001.2014.3001.5502

        $$的作用:每次这个脚本被调用时,它都会生成一个包含当前进程ID的日志文件名,如 `script_log_12345.txt`(其中 `12345` 是脚本的进程ID)。这样,即使多个用户或进程同时运行这个脚本,每个实例都会将日志写入一个不同的文件。

        将命令序列按格式写在一起

        可方便重复使用命令序列

        shell函数定义

[function] 函数名(){
    命令序列
    [return x]
}

        调用函数

                函数名 [参数1] [参数2]

[root@bogon ~]# cat test02.sh
#!/in/bash


function hello(){
	echo "这是一个函数"
}

hanshu() {
	echo "这是第二个函数"
}


hello
hanshu
        终止函数(后面常常跟一个0~255的数,代表状态码)

                return

                exit

        传参

check_cmd() {
        $1
        if [ "$?" -eq 0 ];then
                echo "$1,命令执行成功"
                return 1
        else
#接收参数也是用$1
                echo "$2,命令执行失败"
        fi
}
#传入参数
check_cmd "yum clean all"
check_cmd "ls"

        command -v 命令:效验命令是否执行成功


canshu(){
        cmd=$1
        if ! command -v $cmd &> /etc/null;then
                echo "执行成功"
        else
                echo "命令不存在 "
                return 2
        fi

}
canshu "yum allaaaaaaaaaa"

        函数的作用和范围

                作用

                        代码复用:函数允许你将一段代码定义为一个独立的单元,然后在需要的地方多次调用它。这避免了代码的重复,提高了代码的可维护性和可读性。

                        模块化:通过将代码分解为多个函数,你可以更容易地将程序划分为逻辑上独立的模块。这有助于管理和理解大型程序。

                        抽象化:函数隐藏了实现的细节,只展示了需要给外部使用的接口。这使得你可以在不改变其他代码的情况下修改函数的内部实现。

                        提高可读性:当函数被命名为描述其功能的名称时,它们可以使代码更加易于理解。阅读者只需查看函数名即可了解该段代码的大致作用。

                        易于调试:由于函数是独立的代码块,因此当出现问题时,你可以更容易地定位到问题的根源。此外,你也可以更容易地为函数编写单元测试。

                    范围    

                                局部范围:函数内部的变量(局部变量)通常只能在函数内部访问。这意味着在函数外部不能直接访问这些变量。这是封装和抽象化的一个关键部分。

                                local 声明的变量为局部变量

                                全局范围:在函数外部定义的变量(全局变量)可以在整个程序中访问。然而,过度使用全局变量可能会导致代码难以理解和维护,因为它们可以被任何函数修改。

        数组

                应用场景

                        获取数组长度

                        获取元素

                        遍历数组

                        获取元素长度

                        切片

                格式

                        数组名=(元素1 元素2 元素3)

                获取数组

                        ${数组名[i]}

                        ${#kgc[@]}

                切皮获取

                        ${数组名[@]:起始下标:切皮长度}

                替换

                        ${数组名[@]/被替换的元素/替换元素}

                删除

                        unset kgc[要删除的元素下标]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值