Shell----第一篇(基础篇)

常用的shell

在这里插入图片描述

  1. Mac端工具: Terminal、iTerm2
  2. windows端工具: gitbash、cygwin;

变量

a=1
b=hello
c=“hello world”
d=‘你好,“中国”’

“=”左右不要有空格
如果内容有空格要使用单引号或者双引号
双引号支持转义,$开头的自变量会被自动替换

echo $a
echo ${b}

echo “$a”

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

预定义变量

echo $PWD
echo $USER
echo $HOME
echo $PATH
echo $RANDOM
echo ~

特殊符号的使用

单引号,表示其内容是字符串值,不支持转义
双引号,用于扩起一条字符串值,支持 $var 形式的变量替换
反斜线\:某些情况下表示转义
((a=a+3)) 是整数扩展:把里面的变量当做整数去处理
$(ls) 执行命令并把结果保存为变量,简写为``
{1…10} 简写为 seq 1 10,表示1到10
seq 1 10 3 表示生成一个1 到 10 ,步长为3

变量类型

字符串 a=“xxx”
数字 i=1314
布尔 true false
数组 array=(a b c)
函数 foo () {echo hello,world}

高于 4.x 的 shell 没有 hash 词典功能
数字型变量只能进行整数运算

浮点型计算请使用 awk ‘BEGIN{print 1/3}’
格式化显示可以换用 awk ‘BEGIN{printf("%.2f\n",1/3)}’

字符串操作

例子
在这里插入图片描述

  • 取值
    ${value:offset} ${value:offset:length}
    ${#value} 字符串长度
    ${#array[*]} 和 ${#array[@]} 数组中元素的个数
  • 掐头去尾与内容替换
    ${value#pattern}    ${value##pattern}    #表⽰掐头
    ${value%pattern}     ${value%%pattern}   %表⽰去尾
    ${value/pattern/string}   ${value//pattern/string} /表⽰替换
    ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}

#与## %与%% /与//的区别:最短匹配模式VS最长匹配模式

  • AWK可以替代这些操作,推荐使用AWK

布尔变量

命令执行返回值 echo $?
0 表示正确
非0 表示错误

判断的类型

算术判断

[ 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 “ v a r " ] 如 果 字 符 串 不 是 空 , 则 结 果 为 真 [ − z " var" ] 如果字符串不是空,则结果为真 [ -z " 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⾥并不⽀持。推荐⽤[]

数组变量

❖ array=(1 3 4 6)
❖ array=(ls)
❖ array[2]=“hello world”
❖ echo ${array[2]};
❖ echo ${array[*] }
❖ echo ${#array[*]}

使⽤ () 来定义数组变量,中间使⽤空格隔开

逻辑控制

条件 if
分⽀ case、select
循环 for、while、until
break 和 continue

有⽣之年也许你只需要⽤到if、for、while

If结构

if [ condition ];then …;fi
if [ condition ];then …;else…;fi
if [ condition ];then …;elif…;fi

简单的逻辑可以使⽤ && || 去替代
[ -f file ] && echo file exist || echo file not exist
条件可以⽤命令返回值代替

for循环

for((c1,c2,c3));
do
…;
done

for((i=0;i<=10;i++));do echo $i;done

for遍历循环

用于递归数组,还可以递归以空格隔开的字符串序列。或者是某个命令的返回值

for f in $array[*];
do

done

ss=‘aa bb cc dd’; for x in $ss;do echo $x;done
for x in `ls`;do echo $x;done
ss=(aa bb cc “ss dddd”);for x in “${ss[@]}”;do echo $x;done

while 循环

while 设置条件
i=0;
while ((i<=3));do
echo $i;((i=i+1));
done

一行行读取文件内容
while read line;do echo $line;done< /tmp/tmp

退出控制

return函数返回
exit 脚本进程退出
break 退出当前循环
continue 跳过当前循环,进入下一次循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值