数组

数组名

数组定义

数组引用

数组元素的赋值方式

销毁数组

1
unset ARRAY_NAME[INDEX]

练习:生成10个随机数保存于数组中,取出最大值和最小值

练习:生成10个随机数保存于数组中,求下标为偶数的所有随机数之和

练习:写一个脚本 定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件名;要统计其下标为偶数的文件中的行数之和

练习:生成10个随机数,对其排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
示例一:生成10个随机数保存于数组中,取出最大值和最小值
#!/bin/bash
#
declare -a rand
declare -i max=
declare -i min=
for in {0..9}; do
    rand[$i]=$RANDOM
    echo ${rand[$i]}
     
    if [ $i -eq 0 ]; then
        max=${rand[$i]}
        min=$max
    fi
    if [ $max -lt ${rand[$i]} ]; then
        max=${rand[$i]}
    fi
    if [ $min -gt ${rand[$i]} ]; then
        min=${rand[$i]}
    fi
done
echo "max: $max"
echo "min: $min"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例一:生成10个随机数保存于数组中,求下标为偶数的所有随机数之和
#!/bin/bash
#
declare -a rand
declare -i sum=0
for in {0..9}; do
    rand[$i]=$RANDOM
    echo ${rand[$i]}
    if [ $[$i%2] -eq 0 ]; then
        let sum+=${rand[$i]}
    fi
done       
echo "sum: $sum"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
练习:写一个脚本
定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件名;要统计其下标为偶数的文件中的行数之和
#!/bin/bash
#
declare -a file_name
file_name=(/var/log/*.log)  ## ARRAY_NAME=( "val1" "val2" "val3" ...) 仅在val中有空格才有必要写引号
declare -i sum=0
for in $(seq 0 ${#file_name[@]}); do
        let i-=1
    if [ $[$i%2] -eq 0 ]; then
        sum=$[sum+$(wc -l < ${file_name[$i]})]
    fi
done
echo $sum

1
2
3
4
5
6
7
8
9
10
11
练习:生成10个随机数,对其排序
#!/bin/bash
#
declare -a rand
declare -i i=0
while [ $i -le 9 ]; do
    rand[$i]=$RANDOM
    let i++
done
echo "${rand[@]}" | xargs -n 1 | sort -n -r | xargs

字符切片

基于模式取子串

自左向右 #*STRING ##*STRING

自右向左 %STRING* %%STRING*


查找替换<[行首、尾]字符>

替换为字符,自左向右

替换为空

使用示例

字符大小写转换 相当于 tr 'a-z' 'A-Z'

使用示例

变量默认值

不存在,赋值

存在时,赋值

不存在报错,存在返回var

为脚本提供配置

使用示例:为设定主机名

mkstemp命令


install命令

练习: 写一个脚本

1) 提示用户输入一个可执行命令的名称

2) 获取此命令所依赖到的所有库文件列表

3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下,

/bin/bash --> /mnt/sysroot/bin/bash

/usr/bin/passwd --> /mnt/sysroot/bin/passwd

4)复制此命令依赖到的所有库文件至目标目录下的对应路径下

/lib/ld-linux-x86_64.so.2 --> /mnt/sysroot/lib/ld-linux-x86_64.so.2

进一步地:

每次复制完成一个命令不退出,而是提示用户键入新的要复制的命令,并重复完成上述功能,直到用户输入quit即退出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
# Version: 0.0.15
# Author: Lcc.org
# Description: ...
DIR="/mnt/sysroot"
[ -d $DIR ] || install -d $DIR
function cpCmd {
    cmd_path=$(which --skip-alias $1)
    local cmdir=$(echo $cmd_path | sed 's,/$,,' | sed -r 's@(.*/)([^/]+)@\1@')
    [ -d $DIR$cmdir ] || install -d $DIR$cmdir
    [ -f $DIR$cmd_path ] && echo -e "\033[32m$DIR$cmd_path\033[0m is exist" || cp $cmd_path  $DIR$cmd_path 
}
function cp_lib {
    for in $(ldd $cmd_path | grep -o --color=auto "/.*[[:space:]]" | tr -d ' '); do
        local libdir=$(echo $i | sed 's,/$,,' | sed -r 's@(.*/)([^/]+)@\1@')
        [ -d $DIR$libdir ] || install -d $DIR$libdir
        [ -f $DIR$i ] && echo -e "\033[32m$DIR$i\033[0m is exist" || cp $i $DIR$i
    done
}
read -t 10 -p 'Enter a binary program name: ' fuke
while "$fuke" != "quit" ]; do
    if "$fuke" == "quit" -o -z "$fuke" ]; then
        continue
    elif ! which $fuke &> /dev/null; then
        continue
    fi
##复制命令
    cpCmd $fuke
##复制库文件
    cp_lib
##显示复制完成
    echo -e "\033[32mcopy finished.....\033[0m"
    read -t 10 -p 'Enter again a binary program name: ' fuke
done

本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1964938,如需转载请自行联系原作者

谢烟客---------Linux之bash编程相关推荐

  1. linux下Bash编程until语句及格式化硬盘分区等编写脚本(十)

    linux下Bash编程until语句及格式化硬盘分区等编写脚本(十) 1.循环语句结构总结 1.1.while语句当条件满足时,进入循环语句 while 条件; do 语句 done 1.2.unt ...

  2. Linux之bash编程基本语法

    在Linux运维工作中,我们为了提高工作效率通常会用bash编写脚本来完成某工作. 今天就来为大家介绍bash的一些常见的基本语法. 在讲解bash语法之前首先介绍一下bash. bash环境主要是由 ...

  3. 谢烟客---------Linux之Bash基础特性(2)

    Linux之哲学思想 一切皆文件 避免交互,实现Bash编程 文本编程命令实现配置 组合小程序完成复杂任务 总结 过程式编程 对象式编程 编译执行 解释执行 程序的组成 数据可存储的位置 数据类型的字 ...

  4. redhat linux之bash 编程

    bash编程:     bash进程:解释器         type shell脚本:     第一行,顶格:         shebang         #!/bin/bash        ...

  5. linux sh/bash 编程常用

    本系列针对Bash Shell,其他的比较流行的Shell还有Korn shell (ksh)和"Tenex C shell" (tcsh ). 一 简单过程 1)可以使用任意一种 ...

  6. linux 中输入bash,Linux上Bash Shell编程

    Linux下Bash Shell编程 Bash Shell Programming in Linux Linux下Bash Shell编程 Bash what? 进阶的内容是什么? Okay, I g ...

  7. 基于Linux的bash/shell编程基础

    目录 第一章 shell入门 1.什么是shell 2.shell入门 3,变量的定义和使用 4.接收用户输入(重点) 5.条件判断语句 6.运算符 6.1.算数运算符 6.2.关系运算符 6.3.逻 ...

  8. bash 运行程序 下一步_怎样用 Bash 编程:语法和工具

    让我们通过本系列文章来学习基本的 Bash 编程语法和工具,以及如何使用变量和控制运算符,这是三篇中的第一篇. -- David Both(作者) Shell 是操作系统的命令解释器,其中 Bash ...

  9. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  10. Linux下Bash入门学习笔记

    学习好shell编程是很有用的,可以使用shell脚本轻巧地完成有趣的工作. 本文地址:http://www.cnblogs.com/yhLinux/p/4047516.html 1. Bash实例, ...

最新文章

  1. 大学老师吐血自白:指导学生写论文真是太太太太太难了!
  2. 【 Notes 】WLLS Algorithm of TOA - Based Positioning (include the two - step WLS estimator)
  3. Xamarin.Android部署失败
  4. insmod 和modprobe的区别
  5. 67 个节省开发者时间的实用工具、库与资源(前端向)
  6. ML:MLOps系列讲解之《基于ML的软件的三个层次之02 Model: Machine Learning Pipelines——2.6 ML Model serialization forma》解读
  7. 前端学习(2611):vuex实现增加
  8. 支付宝支付-支付宝PC端扫码支付
  9. 手机调试python的软件_Appium+Python(ios真机移动端App H5混合自动化实战测试)
  10. [SoapUI] context.expand 和 groovyUtils.getXmlHolder 有什么不一样
  11. poj 3841 Double Queue (AVL树入门)
  12. 深度学习2.0-40.LSTM原理及实战
  13. 5星评价,1位小数显示
  14. [二维压缩] | 图像游程编码
  15. Kinect测量身高
  16. 【硬件木马项目】第二篇:硬件木马检测方法的种类及原理
  17. Ubuntu安装以太坊开发环境
  18. 你会正确卸载数据库吗?
  19. OMRON欧姆龙PLC如何实现远程上下载程序?
  20. CentOS7 之 修改主机名

热门文章

  1. 梅特勒托利多xk3124电子秤说明书_托利多电子秤说明书
  2. QT<八> 绘图事件、绘图设备
  3. CF1132D Stressful Training Solution
  4. IDM+百度网盘提速下载复活版
  5. STM8入门以及程序编译、烧录、IAR使用方法(扫盲篇)
  6. 基于facades数据集的图像成任务,完成各种GAN的对比实验
  7. php 正则 英文开头,php 正则表达式 匹配以“XXX”开头不能以“YYY”结尾
  8. 贵州支教之第二天(11月8日)
  9. Jmeter 修改背景色和字体
  10. AR技术从无到有浅谈AR市的未来场发展