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 >exp111.5.2 命令执行的判断依据

&& $?=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