linux+shell编程 笔记 2

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值