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 的验证功能。

  • 相关阅读:
    Codeforces Round #313 (Div. 2) D. Equivalent Strings 解题心得
    UVA
    2015 HUAS Summer Contest#1~A
    2015 HUAS Summer Training#2~D
    2015 HUAS Summer Training#2~C
    2015 HUAS Summer Training#2~E
    2015 HUAS Summer Training#2~A
    2015 HUAS Provincial Select Contest #1
    2015 HUAS Provincial Select Contest #1~F
    2015 HUAS Provincial Select Contest #2~A
  • 原文地址:https://www.cnblogs.com/pw-fan/p/11244356.html
Copyright © 2011-2022 走看看