zoukankan      html  css  js  c++  java
  • Shell

    文件格式化处理

    printf  '打印格式' 实际内容

    格式:

    a 警告声音输出

     退格键(backspace)

    f 清除屏幕 (form feed)

    输出新的一行

    亦即 Enter 按键

    水平的 [tab] 按键

    v 垂直的 [tab] 按键

    xNN   NN 为两位数的数字,可以转换数字成为字符。 45转换由16进制转化为10所对的字符。

    %ns 那个 n 是数字, s 代表 string ,亦即多少个字符;

    %ni 那个 n 是数字, i 代表 integer ,亦即多少整数字数;

    %N.nf 那个 n N 都是数字, f 代表 floating (浮点)N代表总共的字符大小,n代表小数部分的字符长度

    eg.: printf '%10s %5i %5i %5i %8.2f ' $(cat filename | grep -v Name)

    将文件filenamename行去掉,其他行按规定字符长度打出

    awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename

    awk 主要是处理每一行的字段内的数据,而默认的字段的分隔符为 "空格键" "[tab]"

    通过空格符取出我们想要的字段数据

    通过分隔符隔开后,每个字段内的数据可以由$1,$2......表示

    awk是以行来处理数据,字段是处理数据的最小单位,通过awk提供的内建变量可以知道文件每行的字段总数,每一行是第几行

    NF 每一行 ($0) 拥有的字段总数

    NR 目前 awk 所处理的是第几行数据

    FS 目前的分隔字符,默认是空格键

    awk的逻辑运算符

    cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print "lines:"NR" " $1 " " $3}'

    passwd文件中是以“:”为分隔符的,BEGIN会让默认第一行以空格为分隔符改成以:为分隔符,取出第三字段小于10打印出每行的第一和第三字段

    注意事项:

    awk 的指令间隔:所有 awk 的动作,亦即在 {} 内的动作,如果有需要多个指令辅助时,可利用分号;间隔, 或者直接以 Enter按键来隔开每个指令·

    逻辑运算当中,如果是等于的情况,则务必使用两个等号==

    格式化输出时,在 printf 的格式设定当中,务必加上 ,才能进行分行

    bash shell 的变量不同,在 awk 当中,变量可以直接使用,不需加上 $

    文件比对工具:

    diff用于比对两个文件的差异,是以行去做比对,diff 通常是用在同一的文件的新旧版本差异,diff也可以比对目录下的差异

    diff [-bBi] from-file to-file 

    from-file :作为原始比对文件的档名; to-file :作为目的比对文件的档名;

    from-file to-file 可以 - 取代,那个 - 代表『Standard input』之意。

    -b :忽略一行当中,仅有多个空白的差异视为相同

    -B :忽略空白行的差异。

    -i :忽略大小写的不同。

    cmp:以字节的差异去对比,也可以对比二进制文件的差异

    cmp [-l] file1 file2 

    -l :将所有的不同点的字节处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。

    patch :将旧文件更新成为新文件,先比较先旧版本的差异,并将差异档制作成为补丁档,再由补丁档更新旧文件

    diff -Naur passwd.old passwd.new > passwd.patch 制作出补丁文件

    更新文件:patch -pN patch_file

    还原文件:patch -R -pN patch_file

    Shell script程序化脚本

    #!/bin/bash 在宣告这个 script 使用的 shell

    script 的执行方式差异 (source, sh script, ./script)

    sh:使用直接执行的方法来处理时,系统会给予一支新的 bash 让我们来执行脚本里面的指令,因此变量其实是子程序 bash 内执行的。当脚本执行完毕后,子程序 bash 内的所有数据便被移除。

    source:会在父程序中执行的,因此各项动作都会在原本的 bash 内生效。

    利用test指令的测试功能:

    test -e filename

    -e 该『档名』是否存在?(常用)

    -f 该『档名』是否存在且为文件(file)(常用)

    -d 该『文件名』是否存在且为目录(directory)(常用)

    -r 侦测该档名是否存在且具有『可读』的权限?

    -w 侦测该档名是否存在且具有『可写』的权限?

    -x 侦测该档名是否存在且具有『可执行』的权限?

    test file1 -nt file2

    -nt (newer than)判断 file1 是否比 file2

    -ot (older than)判断 file1 是否比 file2

    test n1 -eq n2

    -eq 两数值相等 (equal)

    -ne 两数值不等 (not equal)-gt n1 大于 n2 (greater than)

    -lt n1 小于 n2 (less than)

    -ge n1 大于等于 n2 (greater than or equal)

    -le n1 小于等于 n2 (less than or equal)

    test -z string 判定字符串是否为 0 ?若 string 为空字符串,则为 true

    test -n string

    判定字符串是否非为 0 ?若 string 为空字符串,则为 false

    注: -n 亦可省略

    test str1 == str2 判定 str1 是否等于 str2 ,若相等,则回传 true

    test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false

    test -r filename -a -x filename

    -a

    (and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r x 权限

    时,才回传 true

    -o

    (or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r x 权限时,

    就可回传 true

    ! 反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true

    判断符号:[ ]

    在中括号 [] 内的每个组件都需要有空格键来分隔;

    在中括号内的变数,最好都以双引号括号起来;

    在中括号内的常数,最好都以单或双引号括号起来。

    Shell script的默认参数:

    $0 为执行脚本的文件名,后面所带的参数以空格为分隔符以$1持续增加

    $@代表所有的参数,且每个参数都是独立,"$1" "$2" "$3" "$4"

    条件判断式

    if [条件判断式];

    then

    指令工作内容

    fi

     

    多重、复杂条件判断式

    if [ 条件判断式一 ];

    then

    当条件判断式一成立时,可以进行的指令工作内容;

    elif [ 条件判断式二 ];

    then

    当条件判断式二成立时,可以进行的指令工作内容;

    else

    当条件判断式一与二均不成立时,可以进行的指令工作内容;

    fi

    case ..... esac 判断

    case $变量名称 in <==关键词为 case ,变数前有钱字号

    "第一个变量内容") <==每个变量内容建议用双引号括起来,关键词则为小括号 )

    程序段

    ;; <==每个类别结尾使用两个连续的分号来处理!

    "第二个变量内容")

    程序段

    ;;

    *) <==最后一个变量内容都会用 * 来代表所有其他值

    不包含第一个变量内容与第二个变量内容的其他程序执行段

    exit 1

    ;;

    esac

     

    function功能

    function fname() {

    程序段

    } 

    shell script 的执行方式是由上而下,由左而右, 因此在 shell script 当中的 function 的设定一

    定要在程序的最前面

    function 也是拥有内建变量的他的内建变量与 shell script 很类似, 函数名称代表示 $0

    而后续接的变量也是以 $1, $2... 来取代的

    循环:while do done, until do done (不定循环) for...do...done (固定循环)

    while [ 判断式 ]

    do

    程序段落

    done

    当判断式条件成立时,就进行循环,直到判断式的条件不成立才停止

    until [ condition ]

    do

    程序段落

    done

    while 相反,当 condition 条件成立时,就终止循环, 否则就持续进行循环的程序段

    for var in con1 con2 con3 ...

    do

    程序段

    done

    数值处理:

    for (( 初始值; 限制值; 执行步阶 )) 数字执行 C语言for循环差不多

    do

    程序段

    done

    shell script的追踪与debug

    sh [-nvx] scripts.sh

    -n :不要执行 script,仅查询语法的问题

    -v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上

    -x :将使用到的 script 内容显示到屏幕上

    ACL

    使用者 (user):可以针对使用者来设定权限;

    群组 (group):针对群组为对象来设定其权限;

    默认属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;

    设定与观察ACL

    getfacl:取得某个文件/目录的 ACL 设定项目

    setfacl:设定某个目录/文件的 ACL 规范

    setfacl [-bkRd] [{-m|-x} acl 参数] 目标文件名

    选项与参数:

    -m :设定后续的 acl 参数给文件使用,不可与 -x 合用;

    -x :删除后续的 acl 参数,不可与 -m 合用;

    -b :移除『所有的』 ACL 设定参数;

    -k :移除『预设的』 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;

    -R :递归设定 acl ,亦即包括次目录都会被设定起来;

    -d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值

    setfacl -m u:fpw:rx filename fpw用户给予file文件rx权限

    setfacl -m u::rwx filename 给当前user用户rwx权限

    getfacl filename

    针对有效权限设定:setfacl -m m:r filename

    权限使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效,此即有效权限 可以透过使用 mask 来规范最大允许的权限,就能够可以避免不小心 开放某些权限给其他使用者或群组了

    使用默认权限设定目录未来文件的 ACL 权限继承『 d:[u|g]:[user|group]:权限 』

    setfacl -m d:u:fpw:rx /srv/projecta 让属性继承到次目录底下

    特殊的 shell, /sbin/nologin

    让某个具有 /sbin/nologin 的使用者知道,他们不能登入主机时,可以建立 /etc/nologin.txt 这个文件, 并且在这个文件内说明不能登入的原因,那么下次当这个用户想要登入系统时,屏幕上出现的就会是 /etc/nologin.txt 这个文件的内容,而不是预设的内容了!

    PAM是一套应用程序编程接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM后,PAM就能够回报使用者验证的结果(成功或失败)PAM 是一个独立的 API 存在,只要任何程序有需求时,可以向 PAM 发出验证要求的通知, PAM 经过一连串的验证后,将验证的结果回报给该程序,然后该程序就能够利用验证 的结果来进行可登入或显示其他无法使用的讯息。可以在写程序的时候将 PAM 模块的功能加入,就能够利用 PAM 的验证功能。

  • 相关阅读:
    ZOJ 3818 Pretty Poem
    HDU 4597 Play Game
    HDU 4497 GCD and LCM
    CSU 1335 高桥和低桥
    UVA 10791 Minimum Sum LCM
    CSU 1119 Collecting Coins
    CSU 1120 病毒
    UVA 12169 Disgruntled Judge
    HDU 1301 Jungle Roads
    POJ 1258 Agri-Net
  • 原文地址:https://www.cnblogs.com/pw-fan/p/11244356.html
Copyright © 2011-2022 走看看