1、函数
函数在当前环境下运行,共享调用它的脚本中的变量。 并且,函数运行你以位置变量赋值的方式向函数传递参数。函数提内部也可以使用local限定词创建局部变量。
使用内置命令export -f可以将函数到处到子shell中。
可以使用declare -f找到登陆会话中定义的函数,函数按照字母顺序打印所有的函数定义。也可以通过使用declare -F来只查看函数名。
2、vi编辑器
1)删除一行:dd
2)删除一个单词:dw
3)删除当前字符:x
4)删除光标之后的该行部分:d$
5)删除以当前行开始的n行:ndd
6)删除以当前自负开始的n个字符:ndw
7)删除到该行的开始位置的字符:d0
8)删除到某个单词的开始位置:db
3、find
按照名字查找:-name
-amin n | 查找系统中最后N分钟访问的文件 |
-atime n | 查找系统中最后n*24小时访问的文件 |
-cmin n | 查找系统中最后N分钟被改变状态的文件 |
-ctime n | 查找系统中最后n*24小时被改变状态的文件 |
-empty | 查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹 |
-false | 查找系统中总是错误的文件 |
-fstype type | 查找系统中存在于指定文件系统的文件,例如:ext2 . |
-gid n | 查找系统中文件数字组 ID 为 n的文件 |
-group gname | 查找系统中文件属于gnam文件组,并且指定组和ID的文件 |
find / -amin -10 #查找在系统中最后10分钟访问的文件
find / -atime -2 #查找在系统中最后48小时访问的文件
find / -empty #查找在系统中为空的文件或者文件夹
find / -group cat #查找在系统中属于 groupcat的文件
find / -mmin -5 #查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
find pathname -option [-print | -exec | -ok]
-print:将find命令匹配的文件输出到标准输出上,不加这个也是可以的。
-exec:对匹配的文件执行该参数所给出的shell命令。
-ok:和-exec是一样的。只不过以一种更安全的模式来执行该参数所给出的shell命令,在执行之前都会提示用户是否真正执行。
find /etc -iname "*rc" -ok cp -l {} /tmp/rcfile/ \;
exec(ok)的格式为:'command' {} \;,就是exec后面紧跟着所要执行的命令或脚本,然后是{},一个空格和一个\,最后是一个分号。
-name:按文件名查找
-perm:按文件权限查找 (find ~ -perm 755 '*.txt')
-user:按文件属主查找
-group:按文件所属组查找
-nogroup:查找无有效所属组的文件,即该文件所属的组不在/etc/groups中
-nouser:查找无有效所属主的文件,即该文件所属的组不在/etc/passed中
-type:按类型查找文件。(b d c p l f (普通文件))
-newer file1 ! file2:查找更改时间比文件file1新,当比file2旧的文件。
4、shift命令
shift命令将变量的个数($#)减一,下面的变量序列都往前移动一位。
shift命令一次移动参数的个数由其所带的参数指定。 shift n
shift重要的用途是,bash定义了9个位置变量,从$1到$9,有个shift,就意味着用户在命令行中不仅仅限于使用9个参数,使用shift可以访问9个参数后的参数了。
5、正则表达式
正则表达式有两种字符匹配,特殊字符和一般字符。一般字符指没有任何特殊意义的字符,而元字符是表达匹配的某些含义。
元字符:
^:‘^xx’匹配所有以xx开头的行;
$:‘xx$’匹配所有以xx结尾的行;
.:匹配一个非换行符的字符。
*:匹配零个或多个先前字符。
[…]:方括号表达式,匹配方括号内任意一个字符。连字符(-)表示连续字符的范围;^符号位于方括号的开始,具有相反的含义。在方括号表达式里,所有的元字符都失去其含义,转为一般字符。
\:打开或关闭后续字符的特殊含义。
():正则表达式群
|:匹配|前面或后面的正则表达式
?:匹配前面正则表达式的零个或一个实例
+:匹配前面正则表达式的一个或一个实例
x\{m,n\} 和 x{m,n}:区间表达式,匹配xx字符出现的次数。x\{m\}是指xx出现m次;x\{m,\}指xx出现至少m次;x\{m,n\}指xx至少出现m次,至多出现n次。
国际化的考虑:
1)POSIX字符集
[:alnum"]:文字数字字符
[:alpha:]:文字字符
[:blank:]:空格和tab字符
[:digit:]:数字字符
[:graph:]:非空字符(非空格、控制字符)
[:lower:]:小写字符
[:upper:]:大写字符
[:cntrl:]:控制字符
[:print:]:标点符号
[:xdigit:]:十六进制数字
2)排序符号
将多个字符序列视为一个元素,使用[.和.]将字符组合括起来。例如,[.ab.]表示以ab字符排序,而单独的c或n都不行。
3)等价字符集
表示视为等价的一族字符,使用[=和=]将字符括起来。例如[=e=]
6、sort命令
-b:忽略前面的空格和制表符;
-c:检查输入是否已按照标志中指定的排序规则进行排序。如果排序不正确,则返回一个非零值。(只有是按照ASCII顺序排序的才可以)
-d:使用字典顺序排序,仅比较字母、数字和空格;
-f:忽略大小写排序;
-r:反序排序;
-u:对排序后相同的行只保留一行;
-n:按算术值对数字字段进行排序。
-m:合并多个输入文件排序
- 代替文件文件,指定标准输入,不指定任何文件名,则命令是对标准输入的排序;
sort - << dd
-o:指定输出文件;
sort fruits.txt -o fruits.txt
不指定任何标志,sort命令基于当前语言环境的整理顺序对输入文件的所有行排序。
sort针对字段的排序:
-t:重新定义sort命令所使用的字段分割符,默认情况是空格。可以通过紧跟Character来指定分隔符。
-k?:告诉sort命令将要比较的键值字段。如:k1.2,3.4->从第一个字段的第二个字符开始比较,一直到第三个字段的第四个字符。
多个-k选项,会从第一个键值字段开始排序,找到匹配该键值的记录后,再进行第二个键值字段的排序。
7、/etc/group(linux下的用户组定义)文件格式:
group_name:passwd:GID:user_list
group_name 是组名;
passwd是组口令(加密过了的),为空表示该组不需要口令;
gid:指定的组id;
user_list:该组的所有用户,多个用户之间用逗号分隔;
——————————————————————————————
/etc/passwd(linux下的用户信息定义)的文件格式:
用户名:加密的口令:数组的用户id:数字的组id:全名或账户的其它说明:家目录:登录shell
——————————————————————————————
/etc/crontab:存放有系统运行的一些调度程序,用户可以建立自己的调度crontab。
/etc/cron.deny表示不能使用crontab命令的用户;
/etc/cron.allow表示能使用crontab的用户;
如果两个文件同时存在,则/etc/cron.allow优先;如果都不存在,只有超级用户可以安排作业。
每个用户都会生成一个自己的crontab文件,这些文件是在/var/spool/cron目录下的。
8、uniq:去除数据流中重复的记录,只留下第一条记录。常常被用于管道中。
uniq读取由infile参数指定的标准输入或文件,命令首先比较相邻的行,然后除去第二行和该行的后续副本,所以重复的行一定要相邻(这也就是这个命令常被用于管道中的原因所在了)。uniq命令可以将最终单独的行写入标准输出或是由outfile参数指定的文件中。infile和outfile参数必须指定不同的文件。
-c:在输出行前面加上此行在文件中出现的次数;
-d:仅显示重复行;
-u:仅显示不重复行
-i:忽略大小写
9、wc:提供文本的行数、字数、字符数统计
10、打印和格式化输出
1)pr:将文本转换成适合打印的文件。将较大的文件分割成多个页面,并为每个页面添加标题。
pr命令把指定文件写入到标准输出,如果指定-参数代替file参数,或者不指定,pr命令读取标准输入。页眉默认包含了页数、日期、时间和文件名称。
--columns=xx,设置列的个数 = -c? , 如果设定的数目过大,没有足够的长度空间容纳列数,pr命令会截取单词来支持显示。
-a:修改-c或者--columns标志的效果,使多个列从左到右水平填充。
-d:为行之间加入一行空行;
-h header:使用注定的头字符作为页眉。默认由file参数指定。
-t:不显示页眉和页脚,每个文件最后一行在该页最后没有空格后就停止。
-m:合并文件,这个不能和-c或--columns标志一起使用。
-w width:设置列的宽度。so仅适用于多个文本列的输出。
2)fmt:格式化文本,使文本不要超过可见的屏幕范围。
3)fold:限制文本宽度。
-b:按字节计数宽度,默认是按列。
-c:按字符计数宽度。
-w:指定最大行宽度。默认为80。
11、cut:可以从一个文本文件或者文本流中提取文本列,从文件的每一行剪切字节、字符和字段,并将这些字节、字符和字段写到标准输出或者指定的文件中。
-b list:指定字节位置;
-c list:指定字符位置;
-f list:指定文件中设想被定界符隔开的字段的列表;如果行中不包含字段定界符,cut命令将不会对行做处理而直接输出出来。除非指定-s标识。
必须指定-b、-c或-f标志,list参数为一个以逗号分隔、以空格分隔或连字符分隔的整数的列表(顺序递增)。
-s:取消不包含定界符的行。与-f标志一起使用。
12、join:连接字段。可以连接不通的文件,使得具有相同key值的记录信息连到一起。它会根据指定栏位,找到两个文件中指定栏位内容相同的行,将它们合并,并根据要求的格式输出内容。
join file fruits.txt -a1
13、tr:文本替换。
tr命令从标准输入删除或替换字符,将结果写入标准输出。一般有两种格式:
tr str1 str2
tr {-d|-s} str
-d:删除字符
-s:剔除重复的字符
tr 'f' 'x' < file