| 关键词:变量 文件 命令 结果 引号 字符 参数 shell 测试 |
1:在shell中,如果变量被声明成整数,把一个结果不是整数的表达式赋值给它时就会变成0. 2:bash并不内置对浮点数的支持,所以会得到错误的消息,变量就会变为0. 3:单引号() 双引号("") 反引号(``) 单引号:单引号括起来的字符都作为普通字符出现. 双引号:除"$", "\", "`"几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通 字符对待. 反引号:反引号括起来的字符串被shell解释为命令. 4:全局变量 在脚本中定义的变量全是全局变量,起作用域为从被定义的地方开始一直到shell脚本结束 或者被显示地删除. 在函数内部定义的变量默认情况下也是全局变量,其作用域为从函数被调用时执行变量定 义的地方开始,一直到shell脚本结束或者被显示地删除为止. 5:局部变量: 在shell语言中,可以在函数内部通过local关键字定义局部变量,另外函数的参数也是局也 是局部变量. 6:实际上shell中变量的原型为${var},而常用的书写形式$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与${var}是没有区别的,但是用${}会比较精确的界定变量名称的范围。 eg:A=Linux eg:echo $AB输出空格 eg:${A}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是否<=number2,若是结果为0 文件测试 -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://www.toutiao.com/a6658576810915136007/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|