天道酬勤,恒者能胜。追求卓越,成功就会在不经意间追上你。

Shell编程基础概念之SHELL常用命令与操作(八.1)

上一篇 / 下一篇  2012-12-31 12:27:50 / 精华(1) / 置顶(1) / 个人分类:Linux操作系统

iphone4S被偷,他万分焦急地四处寻找。街边电话亭突然响铃,他接起,居然是siri打来的!“主人,我被坏人拐走了!想屎你了。”他顺着siri报的地址找去,就看到小偷拿着手机。“请你收回吧,除了滚动播放你照片和发鬼叫声,一直锁屏。”接过手机,他看到记事本上显示:只有主人能捏我的脸



1文件

1.1文件类型,lsal中第一列的第一个字符:

drwxr-xr-x 12 smp20     sms          1024 Aug 1315:36.dt

d目录。

l符号链接(指向另一个文件)

s套接字文件。

b块设备文件。比如informix操作的存储文件为块设备

c字符设备文件。比如/dev/null空设备

p命名管道文件。即进程通信使用的PIPE文件

-普通文件,或者更准确地说,不属于以上几种类型的文件

 

1.2文件权限,lsal中第一列的第2-10个字符

(2-4字符)  文件属主的权限

(5-7字符) 同组用户的权限

(8-10字符)其他用户的权限

 

1.3改变权限位

chmod命令的一般格式为:

chmod [who] operator [permission] filename

who的含义是:

u文件属主权限。

g同组用户权限。

o其他用户权限。

a所有用户(文件属主、同组用户及其他用户)

operator的含义:

+增加权限。

-取消权限。

=设定权限。

permission的含义:

r读权限。

w写权限。

x执行权限。

s文件属主和组set-ID

t粘性位*

l给文件加锁,使其他用户无法访问。

或者:

chmod权限值filename

文件属主       同组用户       其他用户

rwx        rwx        rwx

4+2+1     4+2+1     4+2+1

 

1.4目录权限位

目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限位则意味着搜索和访问该目录

 

1.5改变文件的属主

chown命令的一般形式为:

chown -R -h owner file

-   R选项意味着对所有子目录下的文件也都进行同样的操作。- h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。一旦将文件的所有权交给另外一个用户,就无法再重新收回它的所有权

 

1.6 umask

umask命令确定了你创建文件的缺省模式。这一命令实际上和chmod命令正好相反

umask命令是在/etc/profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久性地设置自己的umask值,那么就把它放在自己$HOME目录下的. profile.bash_profile文件中。

对于SMP或者SCP,我们定义在.cshrc中,这样登陆即生效。如:umask 002这样创建的文件的权限为777-002=775

 

1.7判断文件某些特性

-r file  #是否存在并且可读

-w file  #是否存在并且可写

-s file  #是否存在并且文件大小大于0

-f file  #是否存在并且是规则文件

-d file  #是否存在并且为目录

-x file  #是否存在并且可以执行

-p file  #是否存在并且为管道文件

 

1.8文件记录循环处理

使用while循环读取文件记录进行处理。其中文件输入采用<定向符。循环表达式为read命令,语法如下:

while read var1 var2

do

   #处理代码

done < filename

 

其中:

1一次读取一行数据。

2可以将文件中一行数据以空格或者TAB键格开的域(字段)内容读入变量。如果变量数量小于域(字段)数量,则将前面部分一一对应,最后剩余域的所有内容读入最后一个变量。比如

AAA BBB CCC

while read var1 var2

do

done

var1=’AAA’, var2=’BBB CCC’

1  如果想使用其他字符间隔域(字段),可以修改IFS得到,比如:修改为|

OLD_IFS=$IFS

IFS=|

while read var1 var2..

do

done

 

#恢复IFS原内容

IFS=$OLD_IFS

 

 

2数值操作

可以使用:expr或者bc命令,KSH可以使用let

使用expr应用程序

2.1expr

n1=3

n2=5

n=`expr $n1 + $n2 ` 

注意:+等操作符2侧需要使用空格格开

 

如:

>expr 10000 + 1111   #相加

>expr 10000 \* 1111  #相乘

 

ksh中可使用let

n1=3

n2=5

let n=n1+n2

 

2.2 bc

使用bc可以计算任意长度的计算,不会溢出

>echo "1000000000000000000000000000000*1111" | bc

111100000000000000000000000000000

 

2.3进制转换

可使用printf命令转换

比如:16 to 10

    十六进制数前加“0x"

    test1=`printf "%d" 0x9d83000`

 

 比如:10 to 16

    test2=`printf "%x" 83000

 

3合并与分割

常用的合并与分割命令有:

sort

cut

split

 

3.1 sort排序

sort -cmur -o输出文件t分割符+n输入文件

下面简要介绍一下s o r t的参数:

-c测试文件是否已经分类。

-m合并两个分类文件。

-u删除所有复制行。

-r逆向排序DESC,默认为正向ASC

 

如:将basetab_pps文件按第4个字段逆向排序

sortt\| -r +3 basetab_pps.unl > basetab_pps.unl.sort

注意:不能使用-t|,因为|SHELL中属于管道符号,需要使用\|

 

3.2 cut切割

cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。

下一节将介绍粘贴用法。

cut一般格式为:

cut [options] file1 file2

下面介绍其可用选项:

-c list指定剪切字符数。

-f field指定剪切域数。

-d指定与空格和tab键不同的域分隔符。

-c用来指定剪切范围,如下所示:

-c15-7剪切第1个字符,然后是第5到第7个字符。

-c1-50剪切前50个字符。

-f格式与-c相同。

-f15剪切第1域,第5域。

-f110-12剪切第1域,第1 0域到第1 2域。

 

如:从字符串中aaabb:aaaaa:bbbaaaaa切割出来

>echoaaabb:aaaaa:bbb| cutd:f2

 

3.3 split

split用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可能更容易。使用vi或其他工具诸如sort时,如果文件对于工作缓冲区太大,也会存在一些问题。因此有时没有选择余地,必须将文件分割成小的碎片。

Split命令一般格式:

splitoutput-file-line input-filename output-filename

这里output-file-size指的是文本文件被分割的行数。Split查看文件时,output-file-line选项

指定将文件按每个最多1000行分割。如果有个文件有2800行,那么将分割成3个文件,分别有10001000800行。每个文件格式为x[aa]x[zz]x为文件名首字母,[aa][zz]为文件名剩余部分顺序字符组合,

                 零测试


TAG: 零测试 BASH bash Bash Linux shell Shell 操作系统

 

评分:0

我来说两句

Open Toolbar