1. Shell包括几种?
Bourne Shell,用于系统管理。$为提示符。
C Shell,加入命令行历史、别名、内建算法、文件名补全和作业控制。%为提示符
Korn Shell默认提示符:$
2. Linux支持的Shell
用:cat /etc/shells查看,有BourneAgain Shell(bash)和TC Shell(tcsh)等,默认为bash
3.什么是进程
进程是处在执行状态下,并可以用唯一的PID标识的程序。用ps/pstree命令显示进程。
4.切换Shell
chsh–s /bin/tcsh
5.每个Shell都有一个特别的内建变量用于保存最后一个命令终止时的状态,在TC Shell下是$status,在bash下是$?
6.改变所有权和权限
chmod命令。用于改变目录和文件的权限。权限组合的8种情况
10进制数字 | 2进制数字 | 权限 |
0 | 000 | None |
1 | 001 | - -x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r- - |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
r代表读权限,w表示写权限,x表示执行的权限。u表示用户,g表示组,o表示其他人,a表示所有人
例:chmod 755 file chmod g+w file chmod a=r file
chown命令。用于改变文件和目录的所有者和组
例:chown root file
7.变量:Shell可以定义两类变量:局部变量和环境变量。局部变量为私有,不传递。环境变量由父进程传给子进程。
8.管道。管道为进程之间的通信服务,他是把一个命令的输出作为另外一个命令输入的机制。如:who | wc,通过管道,Shell吧who 指令的输出作为wc命令的输入
9.POSIX是Portable Operating System Interface for Computer Eaviron ment的所写,意思是计算机环境的可一直操作系统界面
10.grep命令:在一个或者多个文件中搜索字符串模版
11.sed命令:非交互式编辑器,可在命令行输入命令和文件名。sed是非破坏性的,在你用Shell重新定向存储输出以前,sed不会改变你的文件。
12.awk命令:用来操纵数据和产生报告的程序语言。有nawk,gawk和awk
awk格式:awk ‘pattern’filename awk ‘{action}’filename
awk ‘pattern’ ‘{action}’ filename
13.awk编程时需要用到的几个内建变量:
FNR:当前文件的记录号 FS:输入域分隔符,默认是空格 IGNORECASE:关闭大小写敏感(赋值为1) NF:当前文件域数量 NR:当前文件记录数
OFMT:数字输出格式 OFS:输出域分隔符 ORS:输出记录分隔符 RS:输入记录分隔符(打印一个换行)
14.awk编程时的条件语句格式:(和C语言差不多)
if(expression){
statement;statement;…..
}
{if(expression){
statement;statement;….
}
else{
statement;statement;…..
}
}
{if(expression){
statement;…
}
else if(expression){
statement;
}
else{
statement;
}
}
15.awk编程时的循环控制语句
break和continue语句。break语句使你能在满足某个特定条件时跳出循环。在满足某个特定条件的情况下,continue可以使循环忽略任何语句,而直接返回循环的顶端,开始下一次重复。
16.程序控制语句:next语句:从输入文件中读取下一行,然后从头开始执行awk脚本
` exit语句:用于结束awk程序。它终止对记录的处理,但是不会略过END模块
17.数组:awk中数组的下标可以是数字和字母,所以称为关联数组。可用域值作为数组的下标:for(index_value in array) statement
18.split函数:awk的内建函数split允许你把一个字符串分割成单词并存储在数组中。
太奇怪了!用split分出的数组竟然是从[1]开始的……
19.awk的命令参数处理:
ARGV:包括命令行的数组,这个数组从0开始……
ARGC:包含命令行参数个数的变量。
20.awk内建函数:
字符串函数:sub和gsub函数:sub(regularexpression,substitution string);
sub(regular expression,substitution string,target string);
gsub函数使得在所有正则表达式被匹配时都发生替换。
index函数:返回子字符串第一次被匹配的位置,偏移量从1开始index(string,substring)
length函数:返回没有参数的字符串的长度。length{string} length
substr函数:返回从位置1开始的字符串的子字符串。
substr(string,startingposition)
substr(string,startingposition,length of string)
match函数:返回在字符串中正则表达式位置的索引,如果找不到正则表达式就返回0:match(string,regular expression),match函数设置变量RSTART为正则表达式第一次被匹配的位置,RLENGTH设置为子字符串的长度。
toupper和tolower函数:在字符串中转换大小写:toupper{string} tolower{string}
时间函数:systime函数:返回从1970年一月一日开始到当前时间(不计闰年)的整秒数 strftime函数:使用c库中的strftime函数格式化时间。格式说明符的格式是%T或%D等等,例如:strftime(“format specification”,systime())
内建数学函数,整数函数int
随机数发生器:rand函数,产生一个大于等于0而小于1的随机数。
srand函数:没有参数的srand函数用时间作为rand函数的种子。srand(x)则用x作为种子,在程序运行过程中,x应当是不断变化的……例如:
awk ‘BEGIN{srand()};{printrand()}’ filename 每次rand都打印不同的值
21.自定义函数:
function name (parameter,parameter,parameter,……){
statements
return expression
}
22.域相关:可用substr函数来建立域
FIELDWIDTHS变量:此变量的值是以空格分隔的数字列表,列表中的每个数字都表示相应的域的宽度。
23.用set和shopt的命令来设置bash的选项
set –o选项:打开选项开关 set +o 选项:关闭选项开关
shopt –s 选项:打开选项开关 shopt –u 选项:关闭选项开关 shopt –p:查看
24.hash命令:控制内部哈希表,存储使用过的命令,用hash –r删除
25.source或点命令:在当前shell环境下执行脚本,不会启动新进程。
26.改变命令行的处理顺序:三个命令:command builtin和enable
27.作业(进程)控制:可通过键入Ctrl-Z将前台进程挂起到后台,用jobs命令列出所有后台进程,用fg命令将后台程序送到前台执行。用%n指出作业号,用kill关闭作业
28.历史命令:history
fc:从历史列表中选择命令、在vi等编辑器中编辑命令
29.重新执行历史命令(bang!bang!)要执行命令列表中的命令,须使用感叹号(称为bang)。如果你用两个感叹号(!!)bang,bang,则将重新执行历史列表中最后的指令。如果你在感叹号后跟一个数字,将执行该数字制定的命令(用history查命令对应的数字)
30.别名:是用户对命令定义的缩写,通常在.bashrc文件中设置,可用alias命令列出别名和创建别名,用unalias命令删除别名。
31.管理目录栈:
dirs内置命令:带-l选项的内置命令dirs以全路径名的格式显示目录栈。
pushd和popd命令:将目录入栈或出栈
32.元字符(通配符)
元字符 | 含义 |
\ | 按文本含义解释后面接着的字符 |
& | 在后台运行进程 |
; | 命令分隔符 |
$ | 变量替换 |
? | 匹配一个字符 |
[abc] | 匹配一个字符集中的一个字符;如a、b、c |
[!abc] | 匹配一个字符集外的一个字符 |
* | 匹配零或多个字符 |
(cmds) | 在子shell中执行命令 |
{cmds} | 在当前shell中执行命令 |
33.变量:可用declare设置变量 declare variable=value (注意:等号两边不能留空格)
echo $$(双美元符号相当于当前shell的PID)
34.环境变量:是能为创建它的shell及其派生子进程所用的变量,也成为全局变量。一般为大写可用过export命令导出
设置环境变量:export variable=value
variable=value;exportvariable
declare –xvariable=value
35.exec命令和重新定向:exec命令可以替换当前程序而不需要启动一个新的进程。
36.bash Shell脚本编程:
第一行:#!/bin/bash #!被称为魔术数字(magic number),用于供内核确认那个程序将翻译并执行这个脚本。该行必须在你的脚本的第一行
37.命令替换:要在字符串中输出命令时用以下格式:
$(linux command)
38.读取用户输入:用read命令
39.数学计算:
整数:用declare –inum声明一个整数,不能将小数赋值给整数
表达和使用不同的进制:variable=base#number-in-that-base
let命令:用来做数学计算和数字表示法检测
40.if命令
ifcommand
then
command
fi
41.if/elif/else命令:if command
then
command(s)
elif command
then
command(s)
else
command(s)
fi
42.null命令:用冒号(:)表示,是一个内建的什么都不做的命令,返回状态值为0。通常null命令作为loop命令的参数来建立一个无限循环。
43.case命令:一个多路分支判断语句,可以用来替换if/elif结构
casevariable in
value1)
command(s)
;;
value2)
command(s)
;;
*)
command(s)
;;
esac
44.for命令:用于根据项目清单确定的次数执行命令。
forvariable in word_list
do
command(s)
done
45.while命令:判断它后面的命令如果退出状态值是0,就执行循环体内的命令,直到done
whilecommand
do
command(s)
done
46.until命令:和while命令类似,只是在until后面的语句为假的时候执行循环体,当退出状态值为0时,循环退出,程序从done后面继续
untilcommand
do
command(s)
done
47.select命令和菜单:一个数字化的菜单显示在标准错误上,PS3用来提示用户输入。shell就等待用户输入。输入的是该菜单中的数字,若输入被保存在制定变量REPLY中,则变量REPLY中的数字与括号右边选项清单中的字符串有对应关系。
48.shift命令:把参量列表位移指定次数(左移)
49.break命令:用来从循环体中强行退出,但不退出程序。
50.continue命令:如果某些条件为真,continue命令控制跳转到循环的顶部。
51.函数:functionfunction_name() { commands ; commands; }
复位函数:使用命令unset从内存中删除函数:unset–f function_name
输出函数:export –ffunction_name
52.函数参数和返回值:
内建的local函数:要创建制在函数内部使用,而当函数退出时就消失的变量,可以用内建的函数local实现。
内建的return函数:return函数可以用来退出函数并返回脚本中调用该函数的地方。
53.信号:由一个进程发送给另外一个进程的,或者在特定的键按下以后由操作系统发送给进程的,又或者在异常情况下发生的,由数字组成的非同步的消息。信号的名字例如HUP和INT通常有一个前缀SIG,例如:SIGHUP、SIGINT、SIGKILL(必杀)等等。
54.trap命令:告诉Shell根据受到的信号而以不同的方式终止当前的进程。如果trap命令后面跟着一个用引号引用的命令,则在接收到指定的信号数字后,就执行这个命令。
trap‘command; command’ signal-number
trap‘command; command’ signal-name
55.信号复位:在trap命令后面跟一个信号或者数字,可以把信号复位成默认动作。trap 2
56.忽略信号:如果trap命令后面跟一对空引号,列表中的信号就会被进程所忽略。trap “ “ 1
57.陷阱列表:通过键入trap命令,可以显示陷阱列表和分配给陷阱的命令清单。
58.调试:bash –xscriptname(显示选项) bash –v scriptname(长选项)
bash –nscriptname(解释但不执行命令) set –x 打开跟踪