分享

shell脚本基础

 忠波irlphwt1ng 2019-11-24

$? #判断上一条命令执行的是否成功,成功返回0,上一条命令不成功返回非0的数字

525CEFF1B1154799A3E22D3DB611ED75.jpg

 

 

$0 #返回脚本的文件名称  $1-$9      返回对应的参数值  $*        返回所有的参数值是什么  $#      返回参数的个数和

26BB2F8E6BB0477CB80EC84AD375DE80.jpg

 

A3F0B82C28C742D5A3FEC43A1E6ADC97.jpg

 

 

调用变量的话 $或者a 或者 ${a}

2AC1191F9C344C5EB8639095B2B6E71E.jpg

 

 

 

 

 

常见的几个符号

       >会覆盖原有的内容

 

F9053DEA467E4E8B8826F3E3E30ACB66.jpg

>>不会覆盖原有的内容

 

93CFEDAA6BEC4BEDB67DC18A5909E349.jpg

 

4239F425D8864AC6AA320CF85208A2A9.jpg

; #执行多条命令

 

9364F381FF644A7CA0822CE4D7BABE1E.jpg

|              #管道符

 

E8C7EF8408E44FA7A584720AAC03EA98.jpg

&&              #前面的命令执行成功,后面的才可以执行

 

4D4695CAF27145BBB91CAB36D5E085AB.jpg

 

 

A59A43C9F2624E9281D0E2CE163100E2.jpg

|| #前面的命令执行失败,后面的才可以执行

5ABBF858D2504A6D9B31B54DBF7EEF6E.jpg

"" #会输出变量值

 

66977E117F7A45B2933632875780F772.jpg

'  '     #输出本身

66977E117F7A45B2933632875780F772.jpg

``    #输出命令结果eg:a=`date`;echo $a

 

214B4A64B0754AFB8CA315871DE4D3B5.jpg

2>/dev/null  #错误输出到无底洞

 

 

4196E33D04CA4977972169A63EE70C44.jpg

1>/dev/null  #正确输出到无底洞

A7C0FE44564D479BB9C7DE7F9FCBAAE8.jpg

 

 

 

 

加:expr 12 + 6

 

15A673E80725403FB091ECFCC8CE7F06.jpg

expr $a + $b

B88F6411FE3942B5ADDCED0F99A3E339.jpg

echo $[12 + 6]

16EE58C4D617438F9B533006B68DAB4F.jpg

echo $[a + b]

6EE2884C79C240A6A60A801672BB85F3.jpg

echo $((12 + 6)) echo $((a + b))

 

B41DBD25A4FB4D7ABEF25A0D40E30AAC.jpg

减:expr 12 - 6   expr $a - $b    echo $[12 - 6]  echo $[a - b]    echo $((12 - 6))  echo $((a - b))乘:expr 12 \* 6

 

23301C968E474648BA32F9DD3230DF90.jpg

expr $a \* $b

 

2E4BB08A1D4643E387483739697FB18A.jpg

 

C9041807EFE94415818E5F52C0F5794F.jpg

 

 

echo $[a * b]

 

822AEAB1EB14453BA4379B1EDD24CC34.jpg

echo $((12 * 6))

65B51DE590E04585B707976CB7EEF80B.jpg

 

echo $((a * b))

 

37E78413092B4BA9B50FAA642BDCB58B.jpg

除:expr 12 / 6   expr $a / $b    echo $((12 / 6)) echo $((a / b))    echo $[12 / 6]  echo $[a / b]   求余:expr 12 % 6   expr $a % $b      echo $((12 % 6)) echo $((a % b))      echo $[12 % 6] echo $[a % b]

 

 

F4AC4FD85F6047418A3D38B423B3B0D8.jpg

 

 

小数

A05A123A8D9E4CDB9653DF1C71DCAA7C.jpg

bc计算器 保留多少位小数可以通过scale 但是scale只对除法,取余数,乘幂 有效,对加减没有效。

2E87C2AC79AE431588108A9446926232.jpg

 

 

 

 echo "scale=2;(0.2+0.3)/1" | bc    #计算出0.2+0.3的和并保留俩位小数,此时bc计算器会省略掉个位数的0

3B29070678DE40D5A163C8BCFEEC070A.jpg

echo "scale=2;(1.2+1.3)/1" | bc   #计算出1.2+1.3的和并保留俩位小数

03DE89EDC42C4149BF9163C9998A1567.jpg

 

 

 

 

常见的条件判断

l  语法:[ 判断表达式]               ----必须有空格

文件(夹)或者路径: -e  目标是否存在(exist)

 

5C06D462FA944A8AA14CC1EA638E1AB6.jpg

 

37B8305858B443069F0F622D6EF5B7DF.jpg

-d  是否为路径(directory)

BEF03F3A97E14D3E88E20E28E83289F9.jpg

-f  是否为文件(file)

[ -e foer.sh ] || touch foer.sh  #判断当前目录下是否有foer.sh这个文件,假如没有就创建出foer.sh文件

l  权限:

-r  是否有读取权限(read)

 

7A39CBEA2A144D429C046ADE17508EF3.jpg

-w  是否有写入权限(write)

 

6E9E5359E3444876896960E4CDE63351.jpg

-x  是否有执行权限(excute)

8BB6BC59821542648487DB8BB4632391.jpg

[ -x 123.txt ] && echo '有执行权限'

l  整数值(int型):

-eq 等于(equal)

 

62C35EEA25BB48ECAC31717DC6099E20.jpg

-ne 不等于(not equal) -gt 大于(greater than)

 

AACEDF5CC3FA466C8EB74351A0A0B557.jpg

-lt 小于(lesser than) -ge 大于或者等于(greater or equal) -le 小于或者等于(lesser or equal)  [ 9 -gt 8 ] && echo '大于'

l  小数(浮点型):

[ `echo '1.2 < 1.3' | bc` -eq 1 ] && echo '小于'

4CE59E54E4AC4CB99FD94425EC0696BB.jpg

 

l  字符串:

=    相等!=   不相等

 

6A07F48B775A49D0AE90C0E15C4FCB52.jpg

[ 'kkkkk' != 'kkkk' ] && echo '不等于'

 

 

 

E1FB374CEEA349A3BDFE360E4877C527.jpg

 

#!/bin/bash

touch $1

if [ $? -eq 0 ]

then

echo "$1 创建成功"

fi

Inkedbe5f9052b67143b4b5d2b4e24d8c551f_LI.jpg

 

 

 

 

 

shell脚本输入之read命令

l  语法:read -参数

-p:给出提示符。默认不支持"\n"换行

#!/bin/bash

read -p "请输入密码:"  pass

echo $pass

 

9927F4468C6C4F5C9AED89B6E5D0831D.jpg

-s:隐藏输入的内容

 

70034FB2C54C418F8E6943A8C5C80733.jpg

带换行的

 

0DCF90E124974C21A9F2C59C1B16D260.jpg

-t:给出等待的时间,超时会退出read

等待5秒

B49247513C14415FB7F50C90E17BBCDF.jpg

-n:限制读取字符的个数,触发到临界值会自动执行

869794A185284FDAADC329598C05B1B0.jpg

 

A8F3A4F19B18466C906A014A4B40D01B.jpg

 

 

 

 

处理海量数据之grep命令

grep应用场景:通常对数据进行 行的提取

l  语法:grep [选项]...[内容]...[file]

l   

-v  #对内容进行取反提取

A1CBAB50FA494C3498515546F13F59F2.jpg

-n  #对提取的内容显示行号

 

513A738AD9E54400811E328D9C098235.jpg

 

C7BE840F64A648169DE03299061E1F1A.jpg

-w  #精确匹配

8D8E65FD485449BCA99F8E7336FA0D20.jpg

-i  #忽略大小写

A4FE3F30222E43E18E9E8C74861FBB8E.jpg

^  #匹配开头行首

1F7F8AA9FBBF470D9ED00130BF75D033.jpg

-E  #正则匹配

 

101C9440AED84C80A3A6073279D7A050.jpg

 

 

l  cut应用场景:通常对数据进行列的提取

l  语法:cut [选项]...[file]

-d  #指定分割符    -f  #指定截取区域    -c  #以字符为单位进行分割     注意:不加-d选项,默认为制表符,不是空格/bin/bash   #代表可以登录的用户      /sbin/nologin #代表不可以登录的用户  -d与-f:eg:以'|'为分隔符,截取出cut.txt的第一列跟第二列 cut -d '|' -f 1,2 cut.txt

CCE098DA55D1420C84AC220F5EDAC49B.jpg

eg:以'|'为分隔符,截取出cut.txt的第一列至第二列 cut -d '|' -f 1-2 cut.txt

 

DF234C8A0D3E4898A9A69D94A2001F85.jpg

eg:以'|'为分隔符,截取出cut.txt的第二列到最后一列 cut -d '|' -f 2- cut.txt

2021D9EB69934221875979BCA747AE4D.jpg

-c: eg:截取/etc/passwd文件从第二个字符到第三个字符

cut -c 2-3 cut.txt

A610B6ED5C344E72A7D0111D4BB65040.jpg

 

eg:比如领导想叫你截取linux上面所有可登陆普通用户 grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v root

3E09BE49D1E043F0A59370BDA082D4E4.jpg

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多