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>&- 关闭文件标识符(用完之后一定要关闭,不然就一直打开状态,占资源)