11.1 认识BASH这个shell
- BASH Bourne Again SHell
- 查看一个命令是外部命令还是bash内置的
- type ls
- type java
- \enter 转义,让enter不是执行,而是换行的意思
-
11.2 shell的变量功能
能不能在任意目录下执行一个命令,与PATH 这个变量有很大的关系
- 环境变量 PATH HOME MAIL SHELL 通常以大写表示
- echo $name$b$c 和 echo ${name}${b}${c}效果是完全一样的。
- 变量的显示 echo $PATH
- 变量的设置P301 =
$(uname -r) 和
uname -r
是一致的,`是反单引号。export PATH 让该变量在其他子进程中也能执行 使该变量变成环境变量
- 取消变量 unset
- 双引号和单引号的不同~双引号(仍保有变量的内容) 单引号(仅能是一般字符,不会有特殊符号。会失去原有的变量内容,仅仅是字符了) P303
- 环境变量的功能和查看:env 和export
- echo $RANDOM 产生随机数
- set 查看所有变量(包括环境变量和自定义变量)
- PS1 提示符的设置
- echo $$ 查看本shell的PID P306
- echo $? 输出上个执行命令的回传码
- OSTYPE HOSTTYPE MACHTYPE 32位:i386 586 686 64位:x86_64
- export 自定义变量转成环境变量
- 子进程仅会继承父进程的环境变量,不会继承父进程的自定义变量
- locale-a 查看有哪些Linux支持哪些语系 P308
- cat /etc/sysconfig/i18n 查看系统默认的语系定义
- 变量的有效范围
- 变量键盘读取、数组与声明:read array declare P310
- read [-pt] variable
- declare:声明变量的类型 [±aixr] (若不定义,默认是字符串) +可以取消操作
- declare -p sum 查看sum变量的类型
- 数组(array) 变量类型 var[1]=”small min”
- 与文件系统及程序的限制关系 ulimit P312
- 变量内容的删除、替代与替换 P313
和## 从前向后删除(符合替换文字的最短的哪一个/符合替换文字的最长的哪一个)
- %和%% 从后向前删除(符合替换文字的最短的哪一个/符合替换文字的最长的哪一个)
- 替换/ 和//(第一个旧字符会被新字符串替换/全部旧字符都会被替换)
- 变量的测试和内容替换 - : P315 username=$(username:-root)
- =和-的区别(-旧变量不会变,=会让旧变量也变)
test -d “$name””$b” && echo “you”|| echo “meiyou”
test -d $name$b && echo “you”|| echo “meiyou”
这两个是等价的~
注意到双引号和单引号的
11.3 命令别名与命令历史
- alias和umlias
- vi和vim的区别(vim可以多做一些额外的语法检验和颜色显示)
- 命令历史 history 和hitsory file
- !923
- !!
11.4
11.4.5 通配符与特殊符号 P327
通配符 wildcard
- 0到无穷多个任意字符
? 一个任意字符
[] [abcd] 中的一个
[^] 与[]相反
[-]
ll -d /etc/[0-9] //列出该文件夹下含有数字的文件名
特殊符号:
批注 注释
11.5 数据流重定向
标准输入 standard input stdin 0
标准输出 standard output stdout 1
标准错误输出 standard error output stderr 2
数据流重定向 输出导向 替换 数据流重定向 输出导向 累加
/dev/null 垃圾桶黑洞设备
如何写入同一个文件?
< 数据流重定向 输入导向
<< 数据流重定向 输入导向 <<这里可以添加控制字符,利用这个关键字 终止一次输入,而不是CTRL+D
cat >exp1
;
&& $?=0才执行cmd2
|| $?!=0才执行cmd2
命令回传码 $?
假设判断式: cmd1 && cmd2 || cmd3
linux中shell变量$#,$@,$0,$1,$2的含义解释
11.6管道命令(pipe)
管道命令:仅会处理STDOUT的数据 不处理std error output的错误
选取命令:
cut 切割
- cut P335
cut -d ‘分隔字符’ -f 5 用分割字符分割后,采用第5段内容输出
export |cut -c 12- 输出所有行12个字符以后的内容
- grep P335
- grep [-acinv]
11.6.2排序命令:
sort c
wc (-l仅列出多少行 -w仅列出多少字 -m多少字符)
uniq
双向重定向:tee
字符转换命令
tr
col
join
paste
expand
切割命令:split 切割为多个小文件 及多个小文件合并为一个大文件
参数代换:xarges arguments(参数) P342
很多命令不支持管道命令,可以通过xargs 来提供该命令引用stdinput 之用。
即产生某个命令的参数
finger命令 Linux finger命令为系统管理员提供知道某个时候到底有多少用户在使用这台Linux主机的方法
Linux finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。
如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程。
awk ‘BEGIN{FS=”:”} {print $1}’ /etc/passwd | xargs
关于减号-的用途
d=$(df -h |grep “sd””$secDir” |cut -d’ ‘ -f 1)
if [ “$d” !== “” ]; then
[root_@_M3517 opt]# df -h |grep “sda”
/dev/sda1 29.0G 5.9G 23.1G 20% /media/sda1
[root_@_M3517 opt]# secDir=a
[root_@_M3517 opt]# df -h |grep “sd””$secDir”
/dev/sda1 29.0G 5.9G 23.1G 20% /media/sda1
[root_@_M3517 opt]# df -h |grep “sd””$secDir”|cut -d’ ‘ -f 1
/dev/sda1
[root_@_M3517 opt]# d=$(df -h |grep “sd””$secDir”|cut -d’ ‘ -f 1)
[root_@_M3517 opt]# echo $d
[root_@_M3517 ~]# d=$(df -h |grep “sd””$secDir”|cut -d’ ‘ -f 1|sed ‘s//dev///g’)
[root_@_M3517 ~]# echo $d
sda1
mount -o remount rw /
chmod 777 Hardware
The remote SSH server rejected X11 forwarding requestfuwuq