Bash(bash命令用法详解)

Bash,Unixshell的一种,在1987年由布莱恩·福克斯为了GNU方案而编写。1989年发布第一个正式版别,原先是方案用在GNU操作体系上,但能运行于大多数类Unix体系的操作体系之上,包含Linux与MacOSXv10.4都将它作为默许shell。

Bash是Bourneshell的后继兼容版别与开放源代码版别,它的名称来自Bourneshell(sh)的一个双关语(Bourneagain/bornagain):Bourne-AgainSHell。

Bash是一个指令处理器,一般运行于文本窗口中,并能执行用户直接输入的指令。Bash还能从文件中读取指令,这样的文件称为脚本。和其他Unixshell相同,它支持文件名替换(通配符匹配)、管道、here文档、指令替换、变量,以及条件判别和循环遍历的结构控制语句。包含关键字、语法在内的根本特性全部是从sh借鉴过来的。其他特性,例如历史指令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX标准的shell,但有很多扩展。

一个名为Shellshock的安全漏洞在2014年9月初被发现,并迅速导致互联网上的一系列攻击。这个漏洞可追溯到1989年发布的1.03版别。
图片[1]-Bash(bash命令用法详解)-小白之家,bash命令用法详解,最近工作中需求写一个Linux脚本,用到了很多BASH指令,为了防止以后忘记,在这里把它们逐个记下来。或许会比较乱,随意看看就好了。假如有说的不对的当地也欢迎大家纠正。

1,exportVAR=…

这个指令在Shell下直接运转能够使之后运转的脚本也知道这个VAR。可是假如这个指令在脚本中运转,那么不影响脚本以外的参数。举个例子,假如在一个脚本运转之前没有VAR这个环境变量,而在脚本中运转了exportVAR=3这一指令,那么在脚本完毕之后,假如运转echo$VAR,不会有任何显示。阐明export仅在脚本中有用。

2,if…;then…;else…;fi

能够把判别写在不同行,这样就不需求“;”号了。if后边跟[],中括号里边是表达式,表达式与中括号的首尾都需求留一个空格。一个例子来判别VAR为空:

if[-z”$VAR”];thenecho”empty”;elseecho”notempty”;fi

需求留意的是必须把$VAR的两头用双引号包起来。

3,双引号和单引号

说到双引号,它与单引号的差异在于假如引号之间有变量,则必定要用双引号。由于BASH不会检测单引号中的内容,也就是说单引号之中不存在特别字符。echo’$VAR’的输出就是$VAR,在单引号中运用双引号也没有任何问题。相反,假如在双引号中需求打印特别符号是就需求运用’\’来转义。比如echo”$VAR”会输出空字符,而echo”\$VAR”会输出\$VAR。

4,$()

假如需求把一个或一串指令的返回值赋给一个变量,能够用$(),然后把指令放入括号中。例如:

LINES=$(catfilename|wc-l)

5,#!/bin/sh

差点忘了这个比较重要的。这是脚本文件的第一行。用来阐明该脚本是用/bin/sh来运转的。这个如同有些人面试的时分喜爱问。。。然后再脚本中注释一行用#号。不知道有没有能够注释多行的。。。

6,sed’s/abc/cba/’

sed能够用来做正则表达式的搜索和替换,既能够针对文本文件,也能够针对字符串变量。这里我主要运用的是字符串变量,所以一般格式是这样的:

TEMP=$(echo$SVAR|sed’s/.*\(regex\).*/\1/’)

这样就能够在变量SVAR中找到对应regex的内容,然后把它提取出来。regex两边的\(和\)用来把regex对应的内容形成一个组(group),然后\1表明把SVAR的一切内容替换成第一组的内容,也就是regex能够match的那一部分。假如找不到与regex对应的部分,那么返回的是SVAR的一切内容。

7,”${VAR/”substring”}”=”$VAR”

上述等式能够用来判别一个字符串中是否存在substring。假如持平则阐明不存在。由于等式左边会返回从找到的第一个substring开始的子字符串,只有当不存在substring时才会返回原字符串。

8,curl

curl是一个非常强壮的用来发送http恳求的指令。我只用到了一些参数,如

-s表明静默运转,不显示curl指令的速度,完结状况,过错等statistics

-S一般与-s一重用,表明当有过错的时分显示出来

-k当需求发送https恳求时,加上这个表明答应不安全恳求

-X后边跟恳求办法,如POST,PUT,DELETE。假如是GET的话就不用了,由于这是默认操作

-H后边跟头部参数,一个curl指令能够运用多个-H来界说多个参数

-d后边跟body,必须运用单引号开始和完毕

所以一个curl指令或许看上去是这样的:

curl-sS-H’Content-Type:application/json’-d'{“name”:”‘$VAR’”}’http://www.where.com

需求留意的是在body中运用变量的话,需求先用一个单引号完毕上一个单引号的操控规模,再在这个变量之后用一个单引号与后边的单引号作对应。

9,界说办法

在脚本中是能够界说function的。具体方式能够是:

func(){



}

界说时不需求写明输入参数有哪些,由于在办法里边能够直接获取并运用这个办法或者指令后边跟的参数。例如:

funcabc30

那么$1就是abc,$2就是30。假如有更多输入参数,那么能够运用$3,$4,。。。一直下去。

办法也能够有返回值,如

func(){



return35

}

那么funcabc30运转之后,$?中存的就是35。

10,tr

能够用来把字符串中的某一个字符改成另一个字符,所以就能够用来做字符串的切分。例如有一个字符串SVAR=”a,b,c”。经过指令:

arr=$(echo$SVAR|tr”,””\n”)

就能够把一个字符串变成三个。

11,字符串操作

字符串尾部添加字符:SVAR=$SVAR’abc’就能够在SVAR原本的字符串后边添加abc三个字符

字符串删去尾部最后一个字符:SVAR=${SVAR%?}

12,case”$VAR”in

a)



;;

b)



;;

*)



;;

esac

这个就相似C语言中的switch,对VAR中的不同内容进行不同的操作。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论