shell 种类:
-------------------------------------------------
shell 有很多种类, 大致分为4类
/etc/shells 是本机能够使用的 shell
当我们顺利登陆了linux, linux就会依据 /etc/passwd档案给我们设定一个shell (默认的就是bash)
环境变量可以被 子 bash 继承
执行某个指令时, 想要一部分先执行时, 那么要使用(), 参考下例:
cd /lib/modules/$(uname -r)/kernel // 这个例子就会先执行uname -r
history:
--------------------------------------------------------------
history 10 // 查看最近的10条命令
命令记录在 .bash_history 中 // 可以查看曾经的举动
history -w -r 将shell中的历史写入文件, 或从文件读出
history n 列出最近 n 条命令
!76 执行第76条指令( 注意 ! 与 76 之间没有空格 )
!! 执行上一个指令( 相当于按 上箭头 + enter )
!command 例如 !sq 由现在向上搜索到最近的匹配命令执行, 例如搜索到sqlplus /nolog就可以执行这条语句, 很方便
变量内容删除与替换 测试
----------------------
删除
echo ${PATH#/*kerberos/bin:} 其中:
# 表是从前面开始删除 最短的一个
* 任意多个字符
-- 含义, 删除类似这样的最短的字符/kerberos/bin:
echo ${PATH#/*:}
-- 含义, 删除第一个冒号, 并且包含冒号之前的所有字符
## 表示从前面开始删除 最长的一个
echo ${PATH##/*bin:}
-- 含义, 删除最长的一个带 /bin: 的字符串
% 表示从后边开始删除
echo ${PATH%bin*}
-- 含义, 从后边开始找, 第一个匹配bin的就删除
echo ${PATH%bin:*}
-- 含义, 从后边开始找, 0-任意字符都没关系, 一直到 bin: 后边到 bin: 全部删除
-- 注意* 号得位置, 跟从前后找是有关系的
%% 从后边最长的, 删除
替换
有点类似sqlplus中的取代
echo ${PATH/sbin/SBIN}
将左边的sbin取代成SBIN
echo ${PATH//sbin/SBIN}
符合的全部取代, 而不是只取代一个
大括号使用
PATH= ${PATH}:/home/bin // 扩充变量时要加 ${}
name=${name}yes, // 注意此例, 如果没有{} 就会变成下边含义
name=$nameyes, // 这表示name这个变量=nameyes这个变量
测试
使用减号进行测试
username=${my_name-root}
这里的 username 如果 my_name没有定义那么
username=root 如果 my_name有定义那么
username=my_name
冒号结合减号使用
username=${my_name:-root}
注意此处有一个冒号+减号
含义,如果my_name没有被定义或者被定义成空串那么username就是root, 否则就是my_name,针对只是减号得情况追加了测试空串
别名
alias lm = 'ls -al | more'
unalias = lm
env , set:
----------------------------------------------------------------
env : 查看环境变量
set : 观察所有变量, 包括与 bash 操作窗口有关的变量, 以及用户自己定义的变量
$ 本身也是变量, 表示PID, echo $$ 显示当前的PID号
? 表示上一次执行返回结果, 0表示执行成功.
Read, array, declare
-------------------------
read [-pt] variable
declare [-aixr] variable
其中数组: ( 只支持1维数组 )
${数组}, 例如 echo "${var[1]}, ${var[2]}"
login 与 non-login shell
--------------------------------------
login shell: 读取的配置文件:
1. /etc/profile -- 系统设定, 不用修改
2. ~/.bash_profile 或 ~/.bash_login或~/.profile --个人设定
( 如果 bash_profle不存在才读另外两个文件, 如果bash_login不存在才读 profile )
source ~/.bash_profile ( 或 . ~/.bash_profile)使配置文件生效
non-login shell 读取的配置文件:
~/.bashrc
终端机环境设置 stty, set
--------------------------
stty: ( set tty)
stty -a 查看所有设置
^表示ctrl,
通配符和特殊符号
--------------------------
* : 0到无穷多个字符
? : 一定有一个字符
[]: 一定在括号内
[-]: [0-9] 之中的所有字符
[~]: 不在里边
! : 逻辑非
数据流重定向
--------------------------
标准输入 ( stdin ) : 代码为 0 , 使用 < 或 << ;
<< 当输入某个字符时, 完毕 例如: "EOF"
标准输出 ( stdout ) : 代码为 1, 使用 > 或 >>;
>> 表示接着之前的文件继续输出
标准错误输出 ( stderr ) : 代码为 2, 使用 2> 或 2>> ;
将错误和正确写到一个文件:
find /home -name .bashrc >list_file 2>&1
tee 双向重定向
ls -alF | tee filename | more ( -a 累加方式 )
多个指令: && || ;
--------------------------------
管线命令 |
截取命令 cut, grep
cut -d ':' -f 5 ( 分隔符是 :, 第5个 field )
cut -c 5,10 /etc/passwd ( 只解决第5个和第10个字符)
cut -c 6-10 /etc/passwd ( 解决6至10个字符 )
grep -i 忽略大小写 -n 输出行号 -v 反响选择
--color=auto 显示颜色
sort 排序
uniq 去掉重复
wc 统计信息 -l -w -m
split -b 大小分割, -l 行分割
cd /tmp; split -b 300k /etc/termcap termcap 会生成 termcapa, termcapb, 等等前边固定最后一位是a,b,c等
ls -al / | split -l 10 - lsroot
中间的 - 并当成 stdin 或 stdout 标准输入输出
xargs 作为参数使用的指令
cut -d':' -f 1 /etc/passwd |head -n 3| xargs finger