Tab键
Tab键可以用于补全命令,敲两遍可以补全
linux系统变量
- SHELL
显示系统默认的shell
[root@iZbp1ge7stkcnj5044oa81Z ~]# echo $SHELL
/bin/bash
- PATH
系统执行命名的查找路径
[root@iZbp1ge7stkcnj5044oa81Z ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
单引号和双引号以及反引号区别
- 单引号
单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来,值作为普通字符解释
~ echo '$PATH'
$PATH
- 双引号
双引号括起来的字符,除$ ` \
仍然保留特殊功能外,其余作为普通字符
~ echo "$PATH"
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS:/Library/apache-maven-3.5.3/bin:/usr/local/mysql/bin
- 反引号
反引号括起来的字符串不但可以解释shell变量还可以解释shell命令
ls -la `echo $PATH`
source和点
- source 在当前shell环境中执行shell脚本(无需执行权限)
source a.sh
source命令式在当前的shell去读取和执行a.sh
,而a.sh
不需要有执行权限
source命令可以简写为.
. ./a.sh
- sh/bash 使用shell解释器来执行shell脚本(无需执行权限)
sh a.sh
bash a.sh
都是打开一个新的子shell去读取执行a.sh。通常在subshell脚本设置变量不会影响父shell的
- ./ 执行当前目录的shell文件 (需要执行权限)
[root@iZbp1ge7stkcnj5044oa81Z ~]# ./a.sh
-bash: ./a.sh: Permission denied
[root@iZbp1ge7stkcnj5044oa81Z ~]# chmod +x a.sh
[root@iZbp1ge7stkcnj5044oa81Z ~]# ./a.sh
hello a.sh
打开一个subshell(子shell)去读取执行a.sh,但a.sh需要有执行权限
#! /bin/sh
与 #! /bin/bash
的区别
-
#!/bin/sh
是指此脚本使用bin/sh
来解释执行。#!
是特殊的标识符,后面跟的是此解释脚本的shell路径
可以通过cat /etc/shells查看系统支持的shell格式
[root@iZbp1ge7stkcnj5044oa81Z ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
- sh是规范而不是具体实现。
所以/bin/sh一般是软链接(硬链接)到/bin/bash,但是每个系统实现不一致。
花括号,中括号,小括号等
花括号{}
- 大括号扩展
[root@iZbp1ge7stkcnj5044oa81Z ~]# ls {a,b}.sh
a.sh b.sh
-
表达式变量
image
- 特殊替换
-
${var:-string}
:当变量var值为空时,${var:-string}
会把string作为值,当变量var值不为空时,${var:-string}会把var的值作为变量。
image
-
${var:+string}
:${var:+string}
的替换规则和上面的相反,即当变量var的值不为空的时将值换成string,当变量var为空时则不替换或者说是替换成变量var的值,即空值
image
详细信息
小括号()
- 命令组
小括号中的命令会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中的多个命令用分号;
隔开,最后一个命令可以没有分号 - 命令替换
等同于command
(反引号),shell扫描一遍命令行,发现了(command)中的command执行一次,得到其标准输出,再将此输出放到原来命令。
- 用于初始化数组
如:array=(a b c d e f)
中括号[]
1.算术比较
对变量或者值进行算术条件判断
[ var 等于 0 时,返回真
[ var 不等于 0 时,返回真
- 文件系统属性测试
-
[ -f $file_var ]
变量$file_var是一个正常的文件路径或者文件名 -
[ -x $var ]
变量 $var 包含的文件可执行 (execute),则返回真
- 字符串比较
在进行字符串比较时,最好使用双中括号 [[ ]]. 因为单中括号可能会导致一些错误,因此最好避开它们
[[ $str1 = $str2 ]]
whatis命令
whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上。
[root@iZbp1ge7stkcnj5044oa81Z ~]# whatis rm
rm (1) - remove files or directories
whatis
命令依赖于本地数据库的存在,在centos7上可以执行mandb
生成数据库
history
- history用来查看历史执行命令的
[root@iZbp1ge7stkcnj5044oa81Z ~]# history
1 ls
2 echo $a self
// ...
通过!编号
来执行历史命令
[root@iZbp1ge7stkcnj5044oa81Z ~]# !2
echo $a self
-
history文件位置
history一开始是保存在内存中的,当登录断开会保存在文件中。文件保存的位置是
~/..bash_history
-
命令行历史
!string 重复前一个以`string`开头的命令
!?string 重复前一个包含`string`的命令
- 清除当前历史记录
使用history -c
可以删除内存中的历史记录
但是需要真正全部删除的话,需要删除.bash_history
文件
date
-
-d
显示本月的第几天 -
%F
显示年月日,格式为yyyy-MM-dd
[root@iZbp1ge7stkcnj5044oa81Z ~]# date -d '1 day' +%F
2019-10-20
-
%s
显示总共多少秒
[root@iZbp1ge7stkcnj5044oa81Z ~]# date +%s
1571488975
网友评论