Loading

1.Shell基础

1. 变量定义

  • a=1
  • b=seveniuruby
  • d="hello"
  • e='hello "word"'
  • f='ls'


注意:
❖ = 左右不要有空格
❖ 如果内容有空格,需要使⽤单引号或者双引号
❖ 双引号⽀持转义 $开头的变量会被⾃动替换

2.变量使用

❖ echo $a
❖ echo ${b}
❖ echo "$a"
❖ 使⽤$var 或 ${var}来访问变量。后者更为严谨。$var_x ${var}_x
是不同的。
❖ 变量不需要定义也可以使⽤。引⽤未定义的变量,默认为空值

a='hello'
echo "hello $a"

$ echo ${a}_hello
1_hello

3.预定义变量
❖ echo $PWD
❖ echo $USER
❖ echo $HOME
❖ echo $PATH

4.数组变量
❖ array=(1 3 4 6)
❖ array=(ls)
❖ echo ${array[2]};
❖ echo ${array[]}
❖ echo ${#array[
]}
❖ 使⽤ () 来定义数组变量,中间使⽤空格隔开

查看数组长度:${#a[*]}

找文件:$ which python

5.特殊符号的使用
❖ 双引号⽤于括起⼀段字符串值,⽀持$var形式的变量替换
❖ 单引号也表⽰其内容是字符串值,不⽀持转义
❖ \ 反斜线,某些情况下表⽰转义
❖ ((a=a+3)) 是整数扩展。把⾥⾯的变量当作整数去处理。
❖ {1..10} 等价于 seq 1 10,表⽰1到10
❖ seq 1 3 10 表⽰⽣成⼀个1到10,步进为3



优先执行ls,再拼接展示

6.变量类型
❖ 字符串 a="xx"
❖ 数字 i=1314
❖ 布尔 a=true b=false

7.数字型变量
❖ 计算
❖ i=1;echo $i;echo $((i+1))
❖ 更新
❖ ((i=i+1));echo $i
❖ 只能进⾏整数计算
❖ 浮点数计算请使⽤ awk 'BEGIN{print 1/3}'
❖ 格式化显⽰可以换⽤ awk 'BEGIN{printf("%.2f\n", 1/3)}'





8.字符串操作
❖ 取值
❖ ${value:offset}  ${value:offset:length} 从变量中提取⼦串
❖ ${#value} 字符串长度
❖ ${#array[]}和${#array[@]}表⽰数组中元素的个数
❖ 掐头去尾与内容替换
❖ ${value#pattern} ${value##pattern} #表⽰掐头
❖ ${value%pattern} ${value%%pattern} %表⽰去尾
❖ ${value/pattern/string} ${value//pattern/string} /表⽰替换
❖ #与## %与%% /与//的区别:最短匹配模式VS最长匹配模式
❖ ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}

取第六个字符后的三个字符
例子:
❖ xx="1234567";
❖ echo ${xx:2:3};
❖ echo ${xx/3/c};
❖ echo ${xx##
3};
❖ echo ${xx%%5*};
❖ echo $xx|awk '{print substr($0,2,3)}'
❖ echo $xx|sed 's#3#c#g'

9.布尔变量
❖ true
❖ false
❖ 命令执⾏返回值 $?
❖ 任何命令执⾏都会有⼀个返回值
❖ 0表⽰正确
❖ ⾮0表⽰错误

10.判断的类型
❖ 算术判断
❖ [ 2 –eq 2 ] 相等
❖ [ 2 –ne 2 ] 不等
❖ [ 3 –gt 1 ] ⼤于
❖ [ 3 –ge 3 ] ⼤于等于
❖ [ 3 –lt 4 ] ⼩于
❖ [ 3 –le 3 ] ⼩于等于
❖ (())也可以表⽰算术⽐较。((10>=8)) ,((10==10)),
❖ 字符串判断
❖ [ string1 = string2 ] 如果两字符串相同,则结果为真
❖ [ string1 != string2 ] 如果两字符串不相同,则结果为真
❖ [ -n "$var" ] 如果字符串不是空,则结果为真
❖ [ -z "$var" ] 如果字符串是空,则结果为真
❖ [[ "xxxx" == x* ]] 在表达式中表⽰0或者多个字符
❖ [[ xxx == x?? ]] 在表达式中表⽰单个字符
❖ 在引⽤变量的时候要记得加双引号[ -z "$a"] 否则当a未定义时会语法报错
❖ 逻辑判断
❖ [ 2 -ge 1 -a 3 -ge 4 ];echo $? 与
❖ [ 2 -ge 1 -o 3 -ge 4 ];echo $? 或
❖ [[ 2 -ge 1 && 3 -ge 4 ]];echo $? 与
❖ [[ 2 -ge 1 || 3 -ge 4 ]];echo $? 或
❖ [ ! 2 -ge 1 ];echo $? ⾮
❖ shell内置判断
❖ -e file 如果⽂件存在,则结果为真
❖ -d file 如果⽂件是⼀个⼦⽬录,则结果为真
❖ -f file 如果⽂件是⼀个普通⽂件,则结果为真
❖ -r file 如果⽂件可读,则结果为真
❖ -s file 如果⽂件的长度不为0,则结果为真
❖ -w file 如果⽂件可写,则结果为真
❖ -x file 如果⽂件可执⾏,则结果为真
❖ [[]]是[]的扩展语法,在⽼的sh⾥并不⽀持。推荐⽤[]
11.逻辑控制
❖ 条件 if
❖ 分⽀ case
❖ 循环 for while until select
❖ Break 和 continue
❖ 有⽣之年也许你只需要⽤到if、for、while

posted @ 2020-12-28 21:54  西柚不吃五花肉  阅读(78)  评论(0)    收藏  举报