shell笔记
时间:2006-02-07 来源:hb_li_520
单引号’’和双引号””差在那?
命令提示符分为两种:
1种是:普通的文本对shell来说没有特殊的功能;
2种是:具有特定功能的保留字元
= 设定变量
$ 作变量运算替换
Ø 重导向stdout
< 重导向stdin
| 命令管道
& :重導向 file descriptor ,或將命令置於背境執行。
( ):將其內的命令置於 nested subshell 執行,或用於運算或命令替換。
{ }:將其內的命令置於 non-named function 中執行,或用在變量替換的界定範
圍。
; :在前一個命令結束時,而忽略其返回值,繼續執行下一個命令。
&& :在前一個命令結束時,若返回值為 true,繼續執行下一個命令。
|| :在前一個命令結束時,若返回值為 false,繼續執行下一個命令。
!:執行 history 列表中的命令
2.双引号
由双引号括起来的字符,除$, \, '和"这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量值来代替这个变量和$;对于 \ 而言,是转义字符,它告诉Shell不要对其后面的那个字符进行特殊处理,只当做普通字符即可。可以想见,在双引号中需要在前面加上 \ 的只有4个字符$, \, '和"本身。而对 " 号,若其前面没有加 \ ,则Shell会将它同前一个 " 号匹配。
3.反引号
反引号(`)字符所对应的键一般位于键盘的左上角,不要将其同单引号(')混淆。反引号括起来的字串被Shell解释为命令行,在执行时,Shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:
# pwd
/home/xyz
# string="current directory is `pwd`"
# echo $string
current directour is /home/xyz
如果遇到其它的字符请用”\”屏掉其它的含而不含义
Read 的用法(bash shell)
(1)代数法的出现
[root@approach root]# read -p "how old are you?" age
how old are you?25
[root@approach root]# echo $age
25
(2)可以引用单个字符的出现
[root@approach root]# read -p "some words?" -a words
some words?lhb lhw cqx
[root@approach root]# echo ${words[1]}
Lhw
(3)password的当中没有出现字符
[root@approach root]# read -p "password:" -s password
password:[root@approach root]# echo $password
chinaunix
(4)输入时间只有5秒钟
[root@approach root]# read -t 5 auth
abcde
[root@approach root]# echo $auth
Abcde
(5)只允许输入一个字符
[root@approach root]# read -n 1 key
a[root@approach root]# echo $key
a
(6)????????
read -dq -p "input something end with q: " menu
read -e file #在这试试命令历史和补齐功能
cat:显示文件内容,创建文件,还可以用它来显示控制字符。
(1)可以同时显示三个文件
$ cat myfile1 myfile2 myfile3
(2)显示加上行号
[root@approach vsftpd]# cat -n vsftpd.conf
[root@approach vsftpd]# cat -n vsftpd.conf >vsftpd1.conf
(3)清空/etc/test.txt档案
$cat /dev/null > /etc/test.txt
Tee:在输出到文件的同时输出的屏幕
(1)功能见下述
[root@approach root]# ls -l |awk '{print $0}' | tee /root/lss
AWK:格式化报文或者从大的文本文件中抽取数据包。
(1)将ls查出的资料输出到/root/ls文件当中{print $0}代表所有域,这个动作用花括号。必须;当然了这里也可以打印单条的记录。
[root@approach root]# ls -l |awk '{print $0}' >/root/ls
(2)打印报告头文件前面这个(name number\n---------)每一行都会有???。
ls -l |awk '{print "name number\n--------"} {print $1}' | tee /root/lss
(3)AWK在正规表达式中的运用(使用~后面紧跟正规表达式)
ls -l |awk '{if ($4~/brown/) print $0}'|/root/lss
[root@approach root]# awk '$0 ~/4096/' ls (此两个表达的意思同样)
(4)精确的匹配(精确的匹配要使用==号进行此种动作)
awk '$0 ~/96/' ls
awk '$7=="8"' ls(此為精確性匹配) 还有一个不匹配的动作!~
(5)匹配字方式有如下许多种:
<(小于)、>(大于)、….(任意字)、^(行首)、
AWK的内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行- F选项
NF 浏览记录的域个数(一个坚行代表着一个域)
NR 已读的记录数
Awk ‘END {NR print}’shell.txt
21(读取shell.txt中的记录个数)
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
Awk ‘{if(NR>0 && $~/root/)print $0}’ shell.txt
SED 命令
sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝
sed 的定位方式:
x x为一行号,如1
x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
/ p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/
/ p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /
p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3
x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u /
x , y ! 查询不包含指定行号x和y的行。1 , 2 !
2.3 基本sed编辑命令
sed编辑命令
p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息
i \ 在定位行号后插入新文本信息
d 删除定位行
c \ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文糪