首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文掌握shell脚本的基本语法

1.测试通配符 2.通配符,在正则表达式中表示一个字符,也可以用来匹配单个字符。 在表达式中测试一个条件的结果,类似C语言中的三元操作符。 $ 1.引用变量 2.正则表达式中,表示行结束符。...$1是第1参数、$2是第2参数、…、$n表示第n个参数。⚠️注意:10以上要用大括号,如{10}。 $? 最后运行命令的结束代码(返回值),执行成功返回0,不成功则返回非零值(一般解释为错误码)。...Bash变量:不区分类型,都是字符串,不允许进行数值计算,除非变量中包含数字。 如果变量的值中间有空格,则使用引号(单引号或双引号均可)扩起来。 5.4 环境变量 会影响用户接口和shell的行为。...,则创建一个0长度的文件(与touch类似) : 是一个占位符,不产生任何输出 1>filename 重定向stdout 到文件 filename中 1>>filename 如果文件存在,则直接重定向追加到文件...匹配一个空格或一个制表符(tab) [:cntrl:] 匹配控制字符 [:digit:] 匹配十进制数字,等价于0-9 [:graph:] 打印任何可视的字符。

4.1K01

shell脚本编程之路2

Windows批处理强大很多,无论是在循环、运算,数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,数组在Shell脚本中也是非常重要的组成部分,它借助索引将多个独立的数据存储为一个集合。...bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。...bash中的两类数组类型: 普通数组:最常见的数组类型声明格式:array_name=(value0 value1) 关联数组:从bash4.0开始被引入,关联数组的索引值可以使用任意的文本,关联数组在很多操作中很有用...${array_name[index]},可以使用@ (单个参数独立)或 * (所有参数整体)可以获取数组中的所有元素,利用获取字符串长度的#来获取数组长度的方法与获取字符串长度的方法相同;以及可以对数组进行提取删除等等...变量替换:可以根据变量的状态(是否为空、是否定义等)来变它的值 优点是:效率高、代码精简 缺点是:逻辑难懂 变量置换规则:存在三种情况(变量存在、存在值为空、变量不存在) ${var-value

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    sh脚本

    搜索和替换 Bash 提供字符串搜索和替换的多种方法。 字符串头部的模式匹配 以下两种语法可以检查字符串开头,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。...以下两种语法可以检查字符串结尾,是否匹配给定的模式。....*} /home/cam/book/long 基本和#一致,只是将#换成了$ 任意位置的模式匹配 以下两种语法可以检查字符串内部,是否匹配给定的模式。...0 上面的例子中,test命令采用两种写法,判断/etc/hosts文件是否存在,这两种写法是等价的。命令执行后,返回值为0,表示该文件确实存在。...实际上,[这个字符是test命令的一种简写形式,可以看作是一个独立的命令,这解释了为什么它后面必须有空格。 下面把test命令的三种形式,用在if结构中,判断一个文件是否存在。

    10.8K30

    BashShell变量

    echo $HOME 当变量不存在是,Bash Shell 不会报错,而是当作空值处理。 读取变量名时,如果变量名和其他字符连在一起,需要使用 {} 包裹变量名以明确变量名。...4.1 定义数组变量 array=(val1 val2 ... valn) 其中,array 为数组变量,使用 () 来定义其值,值与值之间用空格分隔。...4.2 查询数组变量 查询数组变量的单个元素值可以使用索引查找(索引值是从 0 开始的),比如查找数组第 3 个元素值: echo ${array[2]} 查询整个数组变量可用 * 作为通配符作为索引值...EOF 字符的数量(如果这个值不存在,默认是 1) INPUTRC Readline 初始化文件名(默认是 .inputrc) LANG Shell 的语言环境类别 LC_ALL 定义了一个语言环境类别...Bash Shell 的选项标志是在启动时或以内建命令 set 指定的,或者是 shell 自身设置的(例如选项 -i)。

    2.4K30

    【知识总结】Shell脚本编程入门

    获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。 定义数组 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。...读取数组 读取数组元素值的一般格式是: ${数组名[下标]} 例如: valuen=${array_name[n]} 使用 @ 符号可以获取数组中的所有元素,例如: echo ${array_name[...在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "" 。 关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。...-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。 其他检查符: -S: 判断某文件是否 socket。...可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

    4.5K20

    SHELL(bash)脚本编程二:语法

    定义 元字符 用来分隔词(token)的单个字符,包括: | & ; ( ) space tab token 是指被shell看成一个单一单元的字符序列 bash中包含三种基本的token:保留关键字...向操作系统申明此文件是一个脚本,紧随其后的/bin/bash是此脚本程序的解释器,解释器可以带一个选项(选项一般是为了对一些情况做特殊处理,比如-x表示开启bash的调试模式)。...这和bash的目的和使用者使用bash的目的有很大的关系,bash本身是为了提供一个接口,来支持用户通过命令与操作系统进行交互。...以符号;分隔的命令按顺序执行(和换行符的作用几乎相同),shell等待每个命令执行完成,它们的返回值是最后一个命令的返回值。 以符号&&和||连接的两个命令存在逻辑关系。...case命令的返回值是执行最后一个命令的返回值,当匹配均没有成功时,返回值为0。 脚本举例: #!

    1.4K20

    牛客网剑指offer-2

    )100个点的百位为1 当i表示百位,且百位对应的数为1,如n=31156,i=100,则a=311,b=56,此时百位对应的就是1,则共有a%10(最高两位0-30)次是包含100个连续点,当最高两位为...在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。...数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。...例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2 分析 首先判断边界条件,遍历数组时,使用一个列表去保存遍历过的值,判断当前遍历的元素是否存在列表中,如果存在...模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。

    1.1K20

    Shell脚本学习2

    -ge 检测左边的数是否大等于右边的,如果是,则返回 true。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 #!...-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。 #!.../bin/bash/ str="i love you" echo `expr index "$str" l` echo `expr index "$str" you` #最后一个参数是字符集,返回最靠前字符的...支持一维数组(不支持多维数组),并且没有限定数组的大小,数组元素的下标由0开始编号 获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。...${#array_name[*]} #获取数组长度 echo ${#array_name[@]} #获取数组长度 echo ${#array_name[1]} #获取数组中单个元素的长度 条件控制 if

    19020

    Shell 快速指南

    变量 跟许多程序设计语言一样,你可以在 bash 中创建变量。 Bash 中没有数据类型,bash 中的变量可以保存一个数字、一个字符、一个字符串等等。...数组 跟其它程序设计语言一样,bash中的数组变量给了你引用多个值的能力。在bash中,数组下标也是从0开始,也就是说,第一个元素的下标是0。 跟数组打交道时,要注意一个特殊的环境变量IFS。...IFS,全称 Input Field Separator,保存了数组中元素的分隔符。它的默认值是一个空格IFS=' '。...= $b ] then echo "a 不等于 b" fi 关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。..." else echo "文件不存在" fi 语句 条件语句 跟其它程序设计语言一样,Bash中的条件语句让我们可以决定一个操作是否被执行。

    3.4K101

    Shell 编程语法基础

    单引号与双引号字符串 单引号字符串限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用...值n) 读取数组 读取数组元素值的一般格式是: ${数组名[下表标]} 使用 @ 符号可以获取数组中的所有元素,例如: echo ${array_name[@]} 获取数组的长度 获取数组长度的方法与获取字符串长度的方法相同...数值测试 这是关系运算符,只支持数字,不支持字符串,除非字符串的值是数字。...不相等 test 检查文件属性 检查文件属性也是 test 的常见用法,比如检查一个文件类型是不是普通文件,可以使用 -f 选项,检查路径是否是目录可以用 -d 选项: touch test.sh filename...下面是其他一些常用的文件检查运算符: -b file : 文件存在并且是块设备文件。 -c file : 文件存在并且是字符设备文件。 -d file : 文件存在并且是一个目录。

    2.3K10

    Shell笔记4:shell编程,字符串处理与正则表达式

    /bin/bash for FILE in *.$1 do mv $FILE ${FILE%.$1}.$2 done 2.变量的初始值处理 a.初始值的检测与设置 取值,${var:-word...} 变量var已存在且非null,则返回$var的值 否则返回字符串word,变量var值不变 赋值:${var:=word} 若变量var已存在且非null,则返回$var的值 否则返回字符串...echo "$SUM" 3.脚本的扩展技巧 a.shell数组 关于变量的类型,shell中变量的值默认均视为文本 在数学运算中自动转为整数 var1=123 var2=$var1+20...整体赋值:数组名=(值1,值2,值n) 为单个元素赋值 数组名[下标]=值 获取单个数组元素:${数组[下标]} 获取所有数组元素:${数组[@]} 获取数组元素个数:${#数组[@]} 获取连续的多个数组元素...,保存到数字 2当用户输入EOF后结束输入,显示数组IPADDS个元素的值 3报告本次录入的IP地址个数,其中第一个录入的地址 [root@kvm shdir]# cat getip.sh #!

    67110

    Shell脚本编程_shell简单脚本

    权限 -g 测试文件是否存在且拥有 sgid 权限 -k 测试文件是否存在且拥有 sticky 权限 -z 如果 STRING 的长度为零则为真 -n 如果 STRING 的长度非零则为真 -b 测试文件是否存在并且是块设备文件...-c 测试文件是否存在并且是字符设备文件 -L 测试文件是否存在并且是链接文件 -p 测试文件是否存在并且是管道文件 -S 测试文件是否存在并且是套接字文件 -s 测试文件是否存在并且文件大小为空 其他文件属性测试选项...匹配多个字符串在执行动作后加此命令 详细使用参考:交互式转化批处理工具 expect 2.13 数组 (1) 数组介绍 变量:存储单个元素的内存空间。...: Shell 关联数组 Shell 中的关联数组,获取数组索引 (9) 数组脚本示例 范例:生成 10 个随机数保存于数组中,并找出其最大值和最小值 #!...$min 范例:定义一个数组,数组中的元素对应的值是 /var/log 目录下所有以 .log 结尾的文件。

    8K10

    一篇文章让你彻底掌握 Shell

    Bash 中没有数据类型,bash 中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量,给变量赋值会直接创建变量。...# 创建数组 # 创建数组的不同方式 nums=([2]=2 [0]=0 [1]=1) colors=(red yellow "dark blue") # 访问数组元素 访问数组的单个元素: echo...ge 20: x 小于 y # 10 -le 20: x 小于或等于 y # 关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。...# 控制语句 # 条件语句 跟其它程序设计语言一样,Bash 中的条件语句让我们可以决定一个操作是否被执行。...;; esac 每种情况都是匹配了某个模式的表达式。 | 用来分割多个模式, ) 用来结束一个模式序列。第一个匹配上的模式对应的命令将会被执行。 * 代表任何不匹配以上给定模式的模式。

    2.2K10

    简单&基础shell操作_转发分享

    关于注释的问题: 在shell中使用#进行注释,注意,sh里面没有多行注释,只能每一行加一个#号; 第一个shell脚本程序: #!/bin/bash # 上面中的 #!...可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。...= $b ]中,要需要在方括号与变量以及变量与运算符之间也需要有括号, 否则为错误的。(亲测过) 关系运算符: 只支持数字,不支持字符串,除非字符串的值是数字。...; fi; 其中,test 命令用于检查某个条件是否成立,与方括号([ ])类似。...commandN done 复制代码 注意:列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。

    1.1K10

    shell 快速入门

    可以匹配任意单个字符 # [] 表示可以匹配其中的任意一个,比如 [abc] 可以匹配a或者b或者c # [] 中可以用 - 表示起止。比如 [a-z] 匹配所有小写字母 # *?.../bin/bash # 测试:程序运行过程中经常需要根据实际情况执行特定的命令, # 比如,判断某个文件是否存在,如果不存在,可能需要先创建该文件 # ls tmp.sh # echo $?...# 文件测试符,文件不存在时,均返回假 # -b FILE 当文件存在且是块文件时,返回真,否则为假 # -c FILE 当文件存在且是设备文件时,返回真,否则为假 # -d FILE 测试文件是否为目录...exp3)) # do # command # done for ((i=0, j=100; i 10; i ++)) do echo $i $j done # while 循环 #...' # grep # grep 是基于行的文本搜索工具,该命令常用的参数有: # grep [-ivnc] '需要匹配的字符' 文件名 # -i 不区分大小写 # -c 统计包含匹配的行数 # -n

    1.9K30

    一天一大 leet

    要求算法的时间复杂度为 O(n),即限制了只能循环一次; 先对数组排序 循环数组记录后一个元素等于前一个元素+1或者等于前一个元素的数量 满足条件++,不然重置 与之前记录的值取最大值 个人觉得和题目的限制...x,考虑以其为起点,不断尝试匹配x+1,x+2,⋯ 是否存在,假设最长匹配到了 x+y,那么以 x 为起点的最长连续序列即为 x,x+1,x+2,⋯,x+y,其长度为 y+1,我们不断枚举并更新答案即可...对于匹配的过程,暴力的方法是O(n) 遍历数组去看是否存在这个数,但其实更高效的方法是用一个哈希表存储数组中的数,这样查看一个数是否存在即能优化至O(1) 的时间复杂度。...由于我们要枚举的数 x 一定是在数组中不存在前驱数 x−1 的,不然按照上面的分析我们会从 x−1 开始尝试匹配,因此我们每次在哈希表中检查是否存在 x−1 即能判断是否需要跳过了。...Set 查找元素的时间复杂度是 O(1),JS 的 Set 能给数组去掉重复元素 将数组元素存入 set 中,遍历数组 nums 如果 nums[i] - 1 存在于 set ,说明 nums[i]

    35720

    Linux Shell脚本编程提高

    ,没有匹配则脚本将执行默认值*"后的命令,直到"';;"为止.case的匹配值必须是常量或正则表达式. #!...,重复次数是利用一个条件来控制是否继续重复执行这个语句.为了避免死循环,必须保证循环体中包含循环出口条件即表达式存在退出状态为非0的情况....计数控制: 指定了循环的次数500,初始化计数器值为1,不断测试循环条件i是否小于等于100.在循环条件中设置了计数器加2来计算1~100内所有的奇数之和. #!...: 求数组长度,和单个数组元素长度....: 指定了循环的次数500,初始化计数器值为1,不断测试循环条件i是否小于等于100.在循环条件中设置了计数器加2来计算1~100内所有的奇数之和. #!

    3.3K10
    领券