1.在命令行下:

ctrl +a  快速移动到首字母
ctrl +e   快速移动到行尾
ctrl +左右箭头,每次移动一个单词
ctrl + k 删除当前光标到命令行尾部的命令
ctrl +u   删除光标到 到行首
set -o vi  使用vi编辑器
ctrl +l 清屏=clear

2.文件名通配符

*  大于等于零任意字符  如:ab*d.mp3 abd.mp3,abcd.mp3,abccd.mp3都可以匹配
? 任意一个字符        如:ab?d.mp3 abd.mp3[不匹配],abcd.mp3[匹配],abccd.mp3[不匹配]
[ ]  指定范围,只能从中选择一个 如: [abc]d.mp3 ad.mp3,bd.mp3,cd.mp3
[:alpha:] 表示所有大小写字母 
[:lower:] 所有小写字母
[:upper:] 所有大写字母
[:digit:]0-9的数字
[:alnum:]既包含小写字母,又包含大写字母,还包含0-9数字
[:punct:]所有标点符号
[:space:]空白字符(空格键,Tab键)

注意:使用它它们必须再加[ ],如:[[:alpha:]]b.mp3=[a-zA-Z0-9]

3.命令行展开:
1)~
ls ~   当前用户家目录

ls ~redhat   redhat 家目录
2){ }:touch {a,b}_{1,2} 即a_1,b_1,a_2,b_2

4.shell发展史
shell,bsh(sh)标准shell, 没有命令补齐功能,历史查询功能也差,由bourn创建 bsh

Bill Joy :csh-->tcsh

Korn: ksh ,GNU ksh

bourn again shell(对bsh的又一次开发):bash   遵循GPL
zsh

cat /etc/shells  显示当前系统可用shell

3)打开非系统默认shell,切换shell
直接输入想要打开的shell即可,如:在命令行直接输入ksh 使用exit退出ksh

shell,一个应用程序,提供用户作为系统接口
4)软件编程两大类:
编译类:源代码-->目标代码(编译器) c c++
脚本类:源代码,(解释器,bash),perl 5.8 面向过程(难懂),python(面向对象),ruby(on rail),shell

5.变量:(容器)命名的内存空间
1)在脚本中,一般都是不分类型,都为char

2)bash:
本地变量:局部变量,只对之前文件或者函数有效

环境变量:可以被其他程序使用,可以被一个进程或子进程共享

位置参数变量:引用脚本的一个参数所而使用的

特殊变量:引用脚本运行过程中系统某些状态的值, $?上一个命令运行的状态,
echo $? 判断上一个命令正确还是错误,如果结果显示0,则上一个命令运行正确,非0的数为命令运行错误

3)声明变量:NAME=Jerry
          set class=3
        unset class  撤销变量


4)引用:取变量值

A)" " 弱引用        echo "$变量名"  如:声明变量:NAME=Jerry 
               echo "$NAME"
           echo "$NAME\n"     输出结果为Jerry\n
           echo -e  "$NAME\n" 输出结果为Jerry

B)' ' 强引用  echo ‘$NAME’  输出结果$NAME

C)`` (反引号):命令引用 将命令的执行结果赋值给某个变量
                FILE=`ls /root`或者 $(ls /root)
                echo $FILE
cp /etc/fstab /root/fstab-`date +"%H+%M+%S"`

 
5)环境变量:变量名称规则(字母开头,字母数字下划线)

导出变量:export

set显示所有变量
export显示本地环境变量
env 显示环境变量(只在某个定制的环境中使用)
printenv 显示环境变量,一个或者部分
NAME=Jerry
readonly NAME(设置为只读,不能撤销,变化)
unset NAME 取消变量,注意不加$

PS1:提示符的设置  echo $PS1 显示当前提示符[\u@\h \W]\$
\u:目前用户的帐号名称
\h:仅取主机名在第一个小数点之前的名字
\H:完整的主机名
\t:显示时间,24小时格式“HH:MM:SS”
\w:完整的工作目录名称,由根目录写起的目录名称;主文件夹以~代替
\W:利用basename取得工作目录名称,仅会列出最后一个目录名
\$提示符 如果为root,提示符为#,其他为$
颜色修改:export PS1='\033[31\root\033[0m'  给root加颜色
修改后进行恢复:export PS1='[\u@\h\W]\$'

export将变量变成环境变量

locale显示语言区

6)特殊变量:

echo  $? 显示上次命令状态
1-255 上次命令失败
0   成功
echo $$ 显示当前进程号
6.命令别名:
alias cdnet='cd /etc/sysconfig/network-scripts'
alias 显示所有别名
unalias cdnet 取消命令别名


echo *.txt 能过匹配到以.txt结尾的所有文件都显示
echo *.ttx  匹配不到直接显示*.ttx

touch \*.txt  创建一个*.txt 的文件,需要\进行转义   (反斜杠,转义)


7.写脚本文件
#!/bin/bash(指明解释器)
set -x   (调试显示)
set +x   (结束调试)

chmod u+x a.sh 赋予执行权限
./a.sh 执行
或者直接bash a.sh
bash -x a.sh(执行并调试)

#!/bin/bash
SUM=$(($1+$2))
echo $SUM

chmod u+x c.sh
./c.sh 1 2


8.管道:

echo "1+1" | bc (通过管道将1+1传给bc进行计算)

echo "scale=4(精度的设置,显示四位小数);3/4"|bc
9.交互式:
profile <--环境变量的定义

读取顺序:/etc/profile->/etc/profile.d/*->~/.bash_profile->~/.bashrc->/etc/bashrc

非交互式:bashrc<-别名等的定义

读取顺序:
~/.bashrc->/etc/bashrc->/etc/profile.d/*

source .bashrc  (. .bashrc)重新读取文件

 


11.1)文件句柄,handle,文件描述符(0-9)
标准输入:keyboard, 0
标准输出:monitor(显示器),1
标准错误输出:monitor,2

2)I/O重定向:

> 输入 ls /etc > /tmp/ls.out (不显示,保存在文件当中)
< 输出

1>标准输出重定向
2>标准错误输出重定向 ls /ect(错误) > /tmp/ls.out 会显示错误提示信息
                     ls /ect  2> /tmp/ls.out

&>标出输出和标准错误输出重定向 ls /etc &> /tmp/ls.out3


set -C  拒绝信息覆盖(    >|强行覆盖   )
set +C  取消拒绝覆盖


3)>>追加重定向,文件原有内容不会覆盖
2>>追加标准错误输出重定向
<< here document在脚本当中生成文件  


如:cat >>/tmp/my.txt <<EOF  (以EOF结尾)
#!/bin/bash
cat >> /tmp/my.txt<<EOF
This is my file.
EOF

4).ls /etc/ > /tmp/ls.correct 2> /tmp/ls.error(ls /etc/如果该命令执行
正确就放在/tmp/ls.correct,错误就放在/tmp/ls.error)

&1 与 &> 一样
ls /etc/ > /tmp/ls.correct 2>$1(正确信息放在/tmp/ls.correct中,
错误信息还放在/tmp/ls.correct)


5)tr 'a-z' 'A-Z'  (替换命令)  把所有的小写字母换成大写字母

echo 'abcd'| tr 'a-z' 'A-Z'  将‘abcd’转换成大写‘ABCD’

tee
echo 'abcd'| tee /tmp/tee.out | tr 'a-z' 'A-Z'将‘abcd’先保存在/tmp/tee.out,
再转换成大写‘ABCD’

exec 3> /tmp/custom.out 定义文件标识符

ls /etc >&3    (把结果写入/tmp/custom.out)

exec 3>&-    关闭文件标识符(用完之后一定要关闭,不然就一直打开状态,占资源)