shell操作linux的桥梁 ?? ?创建: ?? ??? ?后缀为.sh的文件 ?? ?编写: ?? ??? ?头部注释为#!/bin/sh或者#!/bin/bash(注释可写可不写,建议写上) ?? ?运行: ?? ??? ?1.通过sh命令执行 ?? ??? ??? ?例如:sh helloworld.sh ?? ??? ?2.通过bash命令执行 ?? ??? ??? ?例如:bash helloworld.sh ?? ??? ?3.通过把文件修改为可执行的文件然后通过./文件命令.sh来执行?? ? ?? ??? ??? ?例如:./helloworld.sh(必须在当前目录下)
变量(动态数据类型,没有数据类型的限制,并且必须初始化) ?? ?定义和初始化 ?? ??? ?格式 ?? ??? ??? ?变量名称=值 ?? ??? ?例如: ?? ??? ??? ?x=10 "abc edefg" ?? ??? ?注意: ?? ??? ??? ?等号两边不能有空格 ?? ?使用:通过$区分变量还是一句话 ?? ??? ?格式1: ?? ??? ??? ?$变量 ?? ??? ?格式2: ?? ??? ??? ?${变量} ?? ??? ?注意: ?? ??? ??? ?格式1,会把$后所有相连内容看做一个变量 ?? ??? ??? ?格式2,${}表示值引用{}之中的内容分,对相连的内容做了一个区分?
$0...$n:表示接收外部参数(执行脚本时,传递的参数) ?? ?格式: ?? ??? ?$下标 ?? ?注意: ?? ??? ?$0永远表示脚本名称(所以脚本名称不算数,$0也不算第一个参数)?? ? ?? ??? ?下标大于一位数只能使用${}获取参数,因为$下标只把第一位数据看做下标 ?? ??? ?$*获取所有参数 ?? ??? ?$#获取所有参数个数?? ??? ?
引号: ?? ?单引号:安原字符串输出 ?? ?双引号:可以引用变量,拥有特殊含义的内容
?? ?拼接:连续获取变量 ?? ?注意: ?? ??? ?如果有多个引号,连续的形成一对 ?? ??? ?引号中使用其他引号,其他引号做字符串使用 ?? ??? ?# 变量后面的值,可以使用多个成对出现引号包起来 ?? ??? ?# 连续的引号是成对的 ?? ??? ?# 每对引号之间不能有空格(空格会把值做一个切分,会报错)
字符串 ?? ?获取长度 ?? ??? ?格式: ?? ??? ??? ?${#变量} ?? ?截取: ?? ??? ?格式: ?? ??? ??? ?${变量:开始位置:长度} ?? ??? ?注意: ?? ??? ??? ?${str::5}:从0获取5个 ?? ??? ??? ?${str:0}:从0获取到末尾 ?? ?替换单个 ?? ??? ?格式: ?? ??? ??? ?${变量/旧/新} ?? ??? ?注意:从左向右替换第一个 ?? ?替换所有 ?? ??? ?格式: ?? ??? ??? ?${变量//旧/新} ?? ?注意:替换不会再原字符上进行修改,想要修改原字符串只能从新赋值
?? ?删除 ?? ??? ?从头开始删除 ?? ??? ??? ?${变量#表达式}:匹配第一个删除 ?? ??? ??? ?${变量##表达式}:匹配最后一个删除 ?? ??? ?从尾开始删除 ?? ??? ??? ?${变量%表达式}:匹配第一个删除 ?? ??? ??? ?${变量%%表达式}:匹配最后一个删除 ?? ??? ?注意:从未开始删除,表达式还是从左向右去写 ?? ??? ??? ?删除不会再原字符上进行修改,想要修改原字符串只能从新赋值 ?? ??? ??? ? 运算符 ?? ?算术运算符 ?? ??? ?bash不支持简单的数学运算,可以通过命令实现expr ?? ??? ?格式1: ?? ??? ??? ?`expr 值 + 值` ?? ??? ??? ?注意:符号两边需要加上空格 ?? ??? ?格式2: ?? ??? ??? ?$[值+值]
?? ?比较运算符: > < >= <=.... ?? ??? ?格式: ?? ??? ??? ?$[值符号值](符号两边空格加不加无所谓) ?? ??? ?注意:比较的结果用1(true)和0(false)表示
?? ?逻辑运算符: &/and |/or !/not ?? ??? ?例如: ?? ??? ??? ?#判断2>1结果 ?? ??? ??? ?echo $[2 > 1] ?? ??? ??? ?#反转2>1结果 ?? ??? ??? ?echo $[!$[2>1]] ?? ??? ??? ?# ?反转后面的结果2>1 and 2>3 ?false0 ?? ??? ??? ?echo $[!$[$[2>1]&$[2>3]]] ?? ??? ??? ?echo $[2>1 & 2<1]
|