设为首页 收藏本站
查看: 1020|回复: 0

[经验分享] bash编程基础及for循环

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-8 10:00:44 | 显示全部楼层 |阅读模式
bash编程要点变量:
本地变量:只对当前shell进程有效,对当前shell之外的其它shell(包括其父、子等)无效;
环境变量:对当shell进程及其子shell进程有效;
局部变量:仅在当前shell进程中的某段代码空间内有效;通常用于函数本地程序;

位置变量:$1, $2, ...

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数…


特殊变量:

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个

$$ 是脚本运行的当前进程ID号

$? 是显示最后命令的退出状态,0表示执行成功,其他表示执行失败。

变量的引用

    ${变量名}:{}可以省略,简写为$变量名

    引号在变量引用中的作用

        “”:双引号,弱引用,会显示变量所表示的值;


        ‘’:单引号,强引用,显示引号内的内容,不会显示变量的值;

            a=1; echo ‘$a’的结果则为$a

        ``:反引号,命令引用,命令替换,会将引号中命令的执行结果引用;作用同$(COMMAND)

            a=`echo1`,echo $a;结果则为1,将echo 1的结果赋值给a,即a=1

声明变量

    整形变量的声明:

let VAR_NAME=VALUE

        declare-i VAR_NAME=VALUE

    环境变量的声明:

        exportVAR_NAME=VALUE

        declare-x VAR_NAME=VALUE

脚本的格式:

    第一行写明解释器,即这个脚本运行是用哪个解释器来解释,例如#!/bin/bash,则使用bash来解释脚本运行,必须第一行顶格写。

    其他以#号开头的行均为解释,解释器会自动略过,不会执行

脚本的运行

    使用chmod +x 脚本名 赋予脚本执行权限,指明路径运行

    直接传递脚本给bash解释器运行,其中

        -n:测试脚本中是否有语法错误

        -x:将脚本执行的每一步都显示到终端上,以便调试脚本

脚本中的算数运算

    $[算数运算式]

    let脚本名=算数运算式

    $((算数运算式))

    $(exprargu1 argu2 argu3)

脚本的流程控制

    for循环:

    格式:

        for 变量 in 列表 ;do

            循环体

        done

    变量在列表中依次取值并将值带进循环体中,列表中的值取尽,则循环执行完毕,循环次数即是列表中值的个数。

    列表:包含至少一个元素的字符串集合

(1)  直接给出

(2)  数值列表:{start..end}, 例如:{1..10}

    seq LAST:从1到LAST,每隔1取一个值,{seq 3} 表示{1,2,3}

    seq FIRST LAST:从FIRST到LAST,每隔1取一个值

    seq FIRST STEP LAST:从FIRST到LAST,每隔STEP取一个值;{seq 2 2 10}表示{2,4,6,8,10}

                (3)  可用是命令执行结果的列表,使用反引号。

for循环实例

计算1-100之内的所有偶数的和

1
2
3
4
5
6
#!/bin/bash
declare -i  sum=0
for i in `seq 2 2 100`;do
        sum=$[$sum+$i]
done
echo $sum



for循环的特殊情况

    (1)for省略,会自动获取脚本参数列表;

    (2)C编程风格:        

1
2
3
4
for((变量赋值;循环条件;修正表达式)); do
                CMD1
                CMD2
            done



    (3) 循环嵌套:外层循环执行一次,内层循环执行完毕之后再开始执行外层循环,外层循环执行一次,内层循环可能执行多次。         

1
2
3
4
5
6
7
fori in [LIST1]; do
                CMD1
                forj in [LIST2]; do
                    CMD2
                    ...
                done
            done



for循环进阶实例

    打印99乘法表

1
2
3
4
5
6
7
8
#!/bin/bash
for i in {1..9};do
        for j in `seq $i`;do
        num=$[$i*$j]
        echo -e -n "$[j]x$=$num        "
        done
        echo
done



1.png





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-37565-1-1.html 上篇帖子: bash脚本基础入门之条件测试 下篇帖子: sed 和read line用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表