概述
记录一下Linux运维的时候常用的bash的知识。
目录相关
获取当前文件的绝对目录
1 | if [ -L $0 ] |
$0 获取当前可执行程序的名称;
if [ -L $0 ] 用于检查一个名字是否为link;
$(readlink $0) 用于获取一个文件的正式的位置;
dirname 直接获取某个文件所在目录
本地IP地址抓取
1 | LOCALIP=`ip addr|grep "eth0:" -A 3|grep "inet "|sed -r "s@.* (([0-9]{1,3}\.){3}[0-9]{1,3})/(32|24|16|8) .*@\1@"` |
中间是使用了 s@正则@\1@ 来抓取了其中的IP地址;
if语句
指令 | 备注 |
---|---|
–b | 当file存在并且是块文件时返回真 |
-c | 当file存在并且是字符文件时返回真 |
-d | 当pathname存在并且是一个目录时返回真 |
-e | 当pathname指定的文件或目录存在时返回真 |
-f | 当file存在并且是正规文件时返回真 |
-g | 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 |
-h | 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 |
-k | 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 |
-p | 当file存在并且是命令管道时返回为真 |
-r | 当由pathname指定的文件或目录存在并且可读时返回为真 |
-s | 当file存在文件大小大于0时返回真 |
-u | 当由pathname指定的文件或目录存在并且设置了SUID位时返回真 |
-w | 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 |
-o | 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。 |
字符串、数字比较
运算符 | 描述 | 示例 |
---|---|---|
-e filename | 如果 filename 存在,则为真 | [ -e /var/log/syslog ] |
-d filename | 如果 filename 为目录,则为真 | [ -d /tmp/mydir ] |
-f filename | 如果 filename 为常规文件,则为真 | [ -f /usr/bin/grep ] |
-L filename | 如果 filename 为符号链接,则为真 | [ -L /usr/bin/grep ] |
-r filename | 如果 filename 可读,则为真 | [ -r /var/log/syslog ] |
-w filename | 如果 filename 可写,则为真 | [ -w /var/mytmp.txt ] |
-x filename | 如果 filename 可执行,则为真 | [ -L /usr/bin/grep ] |
-z string | 如果 string 长度为零,则为真 | [ -z $myvar ] |
-n string | 如果 string 长度非零,则为真 | [ -n $myvar ] |
string1 = string2 | 如果 string1 与 string2 相同,则为真 | [ $myvar = one two three ] |
string1 != string2 | 如果 string1 与 string2 不同,则为真 | [ $myvar != one two three ] |
num1 -eq num2 | 等于 | [ 3 -eq $mynum ] |
num1 -ne num2 | 不等于 | [ 3 -ne $mynum ] |
num1 -lt num2 | 小于 | [ 3 -lt $mynum ] |
num1 -le num2 | 小于或等于 | [ 3 -le $mynum ] |
num1 -gt num2 | 大于 | [ 3 -gt $mynum ] |
num1 -ge num2 | 大于或等于 | [ 3 -ge $mynum ] |
1 | filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ] |
1 | killreg () { |
-z 判断
a.sh
1 | if [ -z $RPCPASS ]; then |
如何让它输出 true, false.export RPCPASS=1
设置一下,执行就会变成 is false。
grep 在目录中查找代码
1 | grep -r --include="*.go" --text "PushBatch" . |
2>&1
在Linux Bash中,2>&1是一种将标准错误输出重定向到标准输出的方法。其中,“2”是表示标准错误输出的文件描述符,而“1”则是表示标准输出的文件描述符。
具体来说,2>&1将标准错误输出重定向到与标准输出相同的地方,也就是说,它将标准错误输出发送到与标准输出相同的位置,这可以方便地将错误信息与正常输出一起处理。
例如,如果我们想要将一个命令的输出和错误信息都输出到一个文件中,可以使用如下的命令:
1 | command > output.txt 2>&1 |
在这个例子中,>符号将命令的输出重定向到名为output.txt的文件中,而2>&1则将标准错误输出也发送到相同的位置。这样,我们就可以同时捕获正常输出和错误信息,并将它们保存到同一个文件中。
读取json地址,批量拷贝文件
1 |
|
读取数据,转换
1 | change_hex_str_int() { |
将秒数转换成人看得懂的事件
1 |
|
参考资料
- [1] Linux中使用的if语句