设为首页 收藏本站
查看: 1030|回复: 1

[经验分享] bash脚本编程(三)

[复制链接]
累计签到:161 天
连续签到:1 天
发表于 2017-5-3 15:00:04 | 显示全部楼层 |阅读模式
bash 脚本编程:
        变量:存储单个元素的内存空间;
        数组:存储多个元素的连续的内存空间
                数组名
                        索引:编号从0开始,属于数值索引;
                                注意:索引也可支持使用自定义的格式,而不仅仅是数值格式;
                                        bash的数据支持稀疏
                        引用数组中的元素:${Array_name[index]}
                声明数组:
                        declare -a Array_name
                        declare -A Array_name: 关联数组;
                数组元素的赋值:
                        1.一次只赋值一个元素:
                                array_name[index]=value
                                        weekday[0]="Sunday"
                                        weekday[4]="Thursday"
                        2.一次赋值全部元素:
                                array_name=("val1" "val2" "val3" ...)
                        3.只赋值特定元素:
                                array_name=([0]="val1" [3]="val2" ...)
                        4.read -a Array
                引用数组元素:${array_name[index]}
                        注意:省略[index]表示引用下表为0的元素;
                数组的长度(数组中元素的个数):${#array_name[*]}, ${#array_name[@]}
                实例:生成10个随机数,并找出其最大值和最小值
                        #!/bin/bash
                        #
                        declare -i rand
                        declare -i max=0
                        for i in {0..9}; do
                                rand[$i]=$RANDOM
                                echo ${rand[$i]}
                                [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
                        done
                        echo "Max: $max"
                实例2:
                        定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;要统计其下表为偶数的文件中的行数之和
               
                        #!/bin/bash
                        #
                        declare -a files
                        files=(/var/log/*.log)
                        declare -i lines=0
                        for i in $(seq 0 $[${#files[*]}-1]); do
                                if [ $[$i%2] -eq 0 ]; then
                                        let lines+= $(wc -l ${files[$i]} | cut -d'' -f1)
                                fi
                        done
                        echo "Lines: $lines."

                引用数组中的元素:
                        所有元素:${array[@]}, ${array[*]}

                        数组切片:${array[@]:offset:number}
                                offset:要跳过的元素个数
                                number:要取出的元素个数,取偏移量之后的所有元素: ${array[@]:offset};

                向数组中追加元素:
                        array[${#array[*]}]
                删除数组中的某元素:
                        unset array[index]
                关联数组:
                        declare -A array_name
                        array_name=([index_name1]='val1' [index_name2]='val2' ...)
                练习:生成10个随机数,升序或降序排列:

                bash的字符串处理工具:
                        字符串切片:
                                ${var:offset:number}
                                取字符串的最右侧的几个字符:${var: -length}
                                        注意:冒号后必须有一个空白字符;
                        基于模式取子串:
                                ${var#*word}:word可以是指定的任意字符:功能:自左向右,查找var变量所存储的字符串中,第一次出现的word,删除字符串开头至第一次出现word字符之间的所有字符;
                                ${var##*word}:同上,不过,删除的是字符串开头至最后一次由word指定的字符之间的所有内容;
                                        file="/var/log/messages"
                                        ${file##*/}:messages

                                ${var%word*}:word可以是指定的任意字符:功能:自右向左,查找var变量所存储的字符串中,第一次出现的word,删除字符串开头至第一次出现word字符之间的所有字符;
                                ${var%%word*}:同上,不过,删除的是字符串结尾向左至最后一次由word指定的字符之间的所有内容;
                                        file="/var/log/messages"
                                        ${file%%/*}:/var/log
                实例:url=http://www.magedu.com:80
                        ${url##*:}
                        ${url%%:*}
        查找替换:
                ${var/pattern/substi}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换
                ${var//pattern/substi}:查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替换

                ${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替换
                ${var/#pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替换

        查找并删除:
                ${var/pattern}:查找vars所表示的字符串中,删除第一次被pattern所匹配到的字符串
                ${var//pattern}:
                ${var/#pattern}:
                ${var/%pattern}:
        字符大小写转换:
                ${var^^}:把var的所有小写字母转换成大写
                ${var,,}:把var中的所有大写字母转成小写

        变量赋值:
                ${var:-value}:如果var为空或未设置,那么返回value;否则,返回value值
                ${var:=value}:如果var为空或未设置,那么返回value,并将value赋值给var;否则,返回var值;

                ${var:+value}:如果var不空,则返回value;
                ${var:?error_info}:如果var为空或未设置,那么返回error_info;否则,返回value值


运维网声明 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.yunweiku.com/thread-372642-1-1.html 上篇帖子: Systemd(一) 下篇帖子: centos6.X千兆网卡重置问题 e1000e 0000:03:00.0: eth0: Timesync Tx Cont...
累计签到:161 天
连续签到:1 天
 楼主| 发表于 2017-5-4 15:08:34 | 显示全部楼层
为脚本程序使用配置文件:
                1.定义文本文件,每行定义"name=value"
                2.在脚本中source此文件即可
        命令:
                mktemp命令
                        mktemp [option] ... [template]
                        template:filename.XXX
                                XXX至少出现三个:
                        OPTION:
                                -d:创建临时目录
                                --tmpdir=/path/to/somedir:指明临时文件目录的位置


                install命令:
                   install [OPTION]... [-T] SOURCE DEST
                   install [OPTION]... SOURCE... DIRECTORY
                   install [OPTION]... -t DIRECTORY SOURCE...
                   install [OPTION]... -d DIRECTORY...
                                选项:
                                        -m MODE
                                        -o OWNER
                                        -g GROUP

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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