首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shell总结

1:在shell中,如果变量被声明成整数,把一个结果不是整数的表达式赋值给它时就会变成0.

2:bash并不内置对浮点数的支持,所以会得到错误的消息,变量就会变为0.

3:单引号('') 双引号("") 反引号(``)

单引号:单引号括起来的字符都作为普通字符出现.

双引号:除"$", "\", "`"几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通

字符对待.

反引号:反引号括起来的字符串被shell解释为命令.

4:全局变量

在脚本中定义的变量全是全局变量,起作用域为从被定义的地方开始一直到shell脚本结束

或者被显示地删除.

在函数内部定义的变量默认情况下也是全局变量,其作用域为从函数被调用时执行变量定

义的地方开始,一直到shell脚本结束或者被显示地删除为止.

5:局部变量:

在shell语言中,可以在函数内部通过local关键字定义局部变量,另外函数的参数也是局也

是局部变量.

6:实际上shell中变量的原型为$,而常用的书写形式$var只是一个简写。在某些情况下,

简写形式会导致程序执行错误。

7:shell语言的系统变量主要在对参数判断和命令返回值判断时使用,包括脚本和函数的参数,以及脚本和函数的返回值。

8:系统常用变量

$n: n是一个整数(1-9),表示参数的位置,例如$1表示第1个参数,$2表示第2个参数等。

$#:命令行参数的个数

$0:当前shell脚本的名称

$?:上一次命令的返回状态或者函数的返回值命令的返回状态比如ls /temp/log若是没有log那么$?为2,若是有值为0。

$*: 以“参数1 参数2 。。。。”构成字符串并返回。

$@:以“参数1”“参数2” 。。。的形式返回每个参数。

$$:返回本程序的进程ID(PID)。

9:$(())、$()、${}的区别

在bash中$()与反引号都是用来作命令替换的

eg: echo today is $(date "+%Y-%m-%d")

eg: echo today is `date "+%Y-%m-%d"`

但是建议使用$()!!!

一般情况下,$var与$是没有区别的,但是用${}会比较精确的界定变量名称的范围。

eg:A=Linux

eg:echo $AB输出空格

eg:$B 输出为LinuxB

$(())用来做算数运算

10:反斜杠("\")

用于将一些shell中的特殊字符转换为普通字符,例如"$"或者"'"等。

11:中间的等号"="称为赋值符号,赋值符号的左右两边不能直接跟空格,否则shell会将其视为命令。

12:一个没有初始化的shell变量被认为是一个空字符串。

13:清除变量后,其所代表的值也会消失,输出空。

14:测试命令(test 和 [)

作用:用户可以使用测试语句来测试指定的条件表达式的条件的真或者假。当指定的条件为真时,真个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值(条件测试的返回值为0)主要是为了保持与shell程序的退出状态一致。条件表达式和左右方括号之间都必须有一个空格。

注意:test string(判断指定的字符串是否为空)只能使用test命令来测试是否为空串,而不能使用方括号的方式来测试。

字符串测试:

string 判断指定的字符串是否为空

string1 = string2 判断两个字符串是否相等(注意有空格)

string1 != string2 判断两个字符串是否不相等(注意有空格)

-n string 判断string是否为非空串

-z string 判断string是否是空串

整数测试

number1 -eq number2 判断两数是否相等,相等结果为0

number1 -ne number2 判断两数是否不相等,若是不相等结果为0

number1 -gt number2 判断number1是否>number2,若是结果为0

number1 -lt number2 判断number1是否

number1 -ge number2 判断number1是否>=number2,若是结果为0

number1 -le number2 判断number1是否

文件测试

-a file 文件是否存在,若是存在结果为0

-b file 文件是否存在且为块文件,若是文件是一个已存在的块文件结果为0

-c file 文件是否存在且为字符文件,若文件是已存在的字符文件结果为0

-d file 文件是否存在且为目录,若文件存在且为目录,则结果为0

-e file 同-a操作符

-s file 文件长度是否大于0或者文件为非空文件,若是文件是非空,结果为0

-f file 文件存在且为常规文件,结果为0

-w file 文件存在且可写,结果为0

-L file 文件存在且为符号链接结果为0

-u file 文件是否设置suid,如果文件已经设置suid结果为0

-r file 文件存在且可读,结果为0

-x file 文件存在且可执行,结果为0

15:在if语句中,如果使用条件测试,可以使用test命令,也可以使用方括号[]

16:还有一个特殊的命令,称为空命令,其表示方法是一个冒号":",该命令不做任何

事情,但是它的退出状态永远是0

17:可以使用&&来替代if语句

eg: test "$(whoami)" != "root" && (echo you are using a no-privileged)

exit 1

首先用test条件测试,若是条件为真,那么就会执行&&后面的语句

18:通配符类型

*:匹配任意长度的任意字符

?:匹配任意单个字符

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围之外的任意单个字符

[:space:]:空白字符

[:punct:]:标点符号

[:lower:]:小写字母

[:upper:]:大写字母

[:alpha:]:大小写字母

[:digit:]:数字

[:alnum:]:数字和大小写字母

19:在shell中可以使用两种语法来表示不同的进制,首先是增加前缀,例如以0开头的文字表示八进制,以0x开头的数字表示16进制;第二种使用"#",例如2#1000表示二进制,8#42表示8进制

20:注意i=5 i = i + (++i)在c的结果为12,在shell结果为11!!!

21:当测试使用"-n"或者"-z"这种方式判断变量是否为空时,"[]"与"[[]]"有区别使用"[]"时需要在变量的外侧加上双引号,与test命令的用法完全相同,使用"[[]]"时则不用。

22:使用"[[]]"是不能使用-a -o的智能使用"&&"和"||"来链接各个条件

23:((exp))结构扩展并计算一个算术表达式的值如果表达式的结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为 0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。

24:运算符:

expr命令:

eg: `expr 2 + 100`

`expr 2 \* 5`

$(()):

eg:$((3+6))(紧凑和松散都可以)

$[]:

eg:$[3+6](紧凑和松散都可以)

let命令:

eg:let n=n+1

25:continue和break后面接数字表示退出几层循环

26:我们定义了一个别名ls,而shell中已经存在一个名称为ls的命令。但是在别名 和命令同时存在的情况下,shell会优先使用用户定义的别名

27:shell函数的参数以空格隔开,如果某个参数中含有空格,则应该使用引号将其 引用起来

28:位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的 $5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令 相当于shift 1

29:函数库文件的调用

. filename

库文件可以是相对路径,也可以是绝对路径,原点命令和库文件名之间有一个空格

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190216G111LV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券