找回密码
 注册
关于网站域名变更的通知
查看: 254|回复: 1
打印 上一主题 下一主题

Linux shell笔记

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-8-28 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    由于工作的需要,越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅。

    5 l* P1 Y0 k, h& UNo.001 文件安全与权限
    1. umask 决定了新建文件的权限 1 n) x7 g! x3 W- R/ D
    2. 软链接(符号链接) ln -s source_path target_path
    % M6 P1 }1 Q8 M7 {3 o
    No.002 find和xargs
    1. find pathname -options [-print -exec -ok] : {$ F$ S3 w0 `! g5 ?. p0 f& z
       其中exec参数的命令格式: 'command-' {} \; 注意必须包含【{} \;】 5 m' _# S- ^$ \( b: I$ D! a5 z- m
       -perm 按权限来查找  ex. find . -perm 755 -print
      ]4 f7 o: e2 a$ o   -mtime 按修改时间来查找 ex. find / -mtime -5 -print 更改时间5天以内 - C( A# G4 N5 v! Q0 p1 F2 l
                                   find / -mtime +5 -print 更改时间5天以前
    1 Z/ w% C- l# A& o; K2. xargs与-exec和-ok类似,但是限制更少,也更快
    8 v3 N+ q: t( s9 g4 o   3种参数的命令:find . -name "*.c" -exec wc -l {} \;
    + X3 _3 \( [- W                        find . -name "*.c" -ok wc -l {} \;   每次执行命令前有提示 4 Q; B$ z1 a& H1 |: B: K
                            find . -name "*.c" | xargs wc -l
    8 t' Y& u6 ~$ d$ }- h/ J2 G- O4 k7 T
    No.003 后台执行命令
    1. [crontab] [at] [&] [nohup]四种

    - [) R' N$ B- }! `# Y' e9 g% T' e" eNo.004 文件名置换
    1. 列出隐藏文件 ex. ls .*

    " n: N# Y! z, [& I" k  PNo.005 shell输入与输出
    1. echo输出时加上 -n 参数不换行, ex. echo -n "aaaa"
    ' D& J& b/ Q) ^# B  M8 f& e. z, R2. tee 命令可以同时输出到屏幕和文件中 ex. ls | tee file.out # w$ D0 I+ a& h7 g; A. w/ `. s: X4 {
    3. 标准输入 0  标准输出 1  标准错误 2 ) ^+ y4 S* f5 X& v) _; `
    4. 将标准输出和标准错误输入到一个文件  ex. command >file.out 2>&1
    ' d. s& ~: O: t0 C
    No.006 命令执行顺序
    1. 命令1 && 命令2    命令1执行成功后才会执行命令2 5 e  ~+ V: J, ?+ c. f1 X. c
    2. 命令1 || 命令2    命令1执行失败后才会执行命令2
    & X2 n' @, k) P
    No.007 正则表达式
    1. 正则表达式元字符及含义 0 U5 k0 I3 W- j# }# g& m' L
        ^                     只匹配行首 $ W5 l$ @1 y) a4 R( z6 ^
        $                     只匹配行尾
    % V4 U7 M; P0 }' L3 W) i8 B" v    *                     匹配0次或多次
    1 Z& D7 F7 `8 B* _    []                    匹配[]内字符 / H. {- _3 _0 P* \' L3 r$ a
        \                     转义符 8 w4 I) {% h! y- K0 i
        .                     匹配任意一个字符
    % b+ p! @" `/ R/ t" Y9 y( K    pattern\{n\}          匹配pattern出现的次数,n次 ' I% f3 m3 f$ t  q8 t* N# ?$ R
        pattern\{n, \}        同上,最少n次 : C4 l7 i9 u9 g- E1 v0 ]9 G- N9 O( a
        pattern\{n, m\}       同上,次数在n与m之间

    4 M" T; }) \6 q4 r  Z+ J5 G0 b7 rNo.008 grep
    1. grep 主要选项及其含义 1 p; k9 [! r) o% B4 N" K) h
       -c    只输出匹配行的行数
    ! U0 i  e( b  e( ]7 w$ b   -i    不区分大小写 * r3 ]' e$ o) Y
       -h    查询多文件时不显示文件名 6 O* B3 o* @, Z# K
       -l    查询多文件时只输出包含匹配字符的文件名 ) i2 ?/ S1 |" P1 L
       -n    显示匹配行及行号   A& ^9 m& r/ ]( u# o7 [0 N
       -s    不显示不存在或无匹配文本的错误信息 * _4 V: i. }  u" S: e! n
       -v    显示不包含匹配文本的所有行
    ' L8 C3 V( `7 p8 J  V2. 查询空行 grep '^$' filename ! h2 g* h0 w( t# U, w2 i6 w
    3. 类名及等价的正则表达式 5 t1 j3 @/ R4 B; w' b! L
       [[:upper:]]    =    [A-Z]
    2 U  Z7 u3 z: }   [[:lower:]]    =    [a-z]
    9 L+ y3 R9 T/ y6 X9 R( L   [[:digit:]]    =    [0-9]
    9 a# u6 p+ ~8 C3 X" L5 |   [[:alnum:]]    =    [0-9a-zA-Z]
    ! O  l' y8 r' z# B   [[:space:]]    =    空格或tab键
    ; I3 p4 d0 V) p. Z& [! R7 T   [[:alpha:]]    =    [a-zA-Z]

    3 }4 [2 O9 [+ x) F/ B1 A$ rNo.009 AWK
    # awk的主要作用在于将文本分成各个区域,便于分别进行处理
      \( W1 X) G# h9 w& X1. awk -F指定分隔符,-f指定awk脚本
    8 a  P# y' W( k% Z% b   ex. awk -F: 'commands' input-file(s)
    $ _1 f0 L* c& _" U   ex. awk -f awk-script input-file(s)
    * L/ ~' T# h' a4 H/ f4 j. ^2. awk 分隔出的域用$1,$2...$n来表示,其中$0表示所有域
    * Z+ j4 b- o  m% B3. awk 条件操作符 <, <=, >=, ==, != ( g' s/ f) U7 r% I& N
       ~  匹配正则表达式   !~  不匹配正则表达式 8 {) H+ F7 i) ?0 |5 w& G/ }
    4. awk 内置变量 ( z# L9 o* j' f" y
       ARGC        命令行参数个数
    ; d2 r; b6 {1 D   ARGV        命令行参数排列 * j$ J9 w6 g# F4 G9 B1 s- Q: P! q5 g
       ENVIRON     支持队列中系统环境变量的使用
    & X/ c; f+ l6 q   FILENAME    awk浏览的文件名 + b0 f- \9 S& n' ~2 `, W
       FNR         浏览文件的记录数
    $ P- D4 h. y, R   FS          设置输入域分隔符,等价于命令行-F选项
    5 J1 A" u" W) [! a$ ?) O8 }   NF          记录的域个数
    # w3 |% W- {+ ^, a% U, }& U) k9 _   NR          已读的记录数 " I# p: o4 @! L, v" V
       OFS         输出域分隔符
    * q! `' M2 R* L  }" `, K3 m/ a   ORS         输出记录分隔符 ) j4 c5 w5 N0 i) J. z% N2 `7 Q  K
       RS          控制记录分隔符 6 w: o$ L" ^8 y) y5 {' L% s* R7 x
       ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file
    % R! w- ]4 L/ p8 Q$ o3 d" y1 p2 {5. awk 字符串函数
    % g. h2 p9 `7 J) }- o/ Z   gsub, index, length, match, split, sprint, sub, substr, substr
    ; C3 Q7 w' v* X8 s' o$ O* `. w6. awk 中的printf函数可以控制格式化输出 * ^$ y1 \/ U+ m: {9 R# O5 ?) i' }
    7. awk 的循环结构 For (element in array) print array[element]

    . e* ^) S( L1 \0 ?No.010 sed
    # sed的主要作用在于过滤和查找文本中的特定内容
    & U2 g4 J& u' n5 l9 d  V1. sed 命令格式: sed [options] sed-command input-file
    9 W9 H1 ?: ~) I3 V' B; `                  sed [options] -f sed-script input-file

    $ {' v8 ?% k; w1 X; SNo.011 合并和分隔文件
    1. sort, uniq, join, cut, paste, split

    2 Q2 W# a5 ]0 l, w( @, y+ ^. A" QNo.012 tr的用法
    1. 去除oops.txt中的重复字符 tr -s "[a-z]" < oops.txt 3 Q3 x1 X, P# |. w; d* m
    2. 去除oops.txt中的空行 tr -s "[\n]" < oops.txt * U/ z# i2 V- {. B' @6 N, c
    3. oops.txt中小写转大写 tr -s "[a-z]" "[A-Z]" < oops.txt
    % x/ X6 L$ B2 o& m
    No.013 登录环境
    1. /etc/passwd 保存所有账号的基本信息(不包括密码) - i$ c- d$ p/ V& [6 z8 e; H6 _
    2. /etc/profile 基本的配置信息,登录时读取此文件
    - h6 v/ i, I, |/ ?! z3. $HOME/*profile 各个用户的profile文件,会覆盖系统的profile文件
    5 M0 j" P; o, s4. $HOME/*logout logout(键入命令exit时)是执行的脚本
    / M% P0 T* }; S6 u; N( X
    No.014 环境和shell变量
    1. shell变量的设置方式
    8 a" [/ B* @3 ?- w" R) I+ r   Variable-name=value    设置实际值到variable-name
    , o# z: d, {! H- B' Z; C   Variable-name+value    如果设置了variable-name,则重设其值 . Q1 A- `. t4 z& x8 p- m$ @
       Variable-name:?value   如果未设置variable-name,显示未定义用户错误信息
    ' S: x6 T& j# ]: A* a; r   Variable-name?value    如果未设置variable-name,显示系统错误信息
    * o, {. q: Q* ^5 C2 N   Variable-name:=value   如果未设置variable-name,设置其值
    ; z. Y+ `9 Z9 {3 Y& Q   Variable-name:-value   如果未设置variable-name,就用value,但是不设置variable-name
    2 j) _3 @! P) R" Y; N! p$ z; C8 ?8 K( b2. 设置只读变量  readonly variable-name ! h. J! R$ a; L) x% L) C9 X
    3. export variable-name 可以将变量导入到子shell中
    ' B7 Z3 |& t* @7 t; j! L4. shell脚本的参数 $0表示脚本名字,$1表示第一个参数......$9表示第九个参数
    ' S8 W* p% @+ X. a5. 特定shell变量 2 }5 l9 P" Q9 I7 P
       $#    参数个数 3 g& g% P) i+ o, I3 x2 R; w. b' m5 b
       $*    用一个字符串显示所有参数
      o7 U/ d' o' E  \" c   $$    脚本运行的当前进程ID
      }0 t7 g% h* w3 J3 y% S1 f   $!    后台运行的最后一个进程的进程ID : {2 f8 B  j4 [+ Y4 o7 f4 O8 c
       $@    与$*相同,每个参数作为独立的字符串
    9 ^, j, H, @! ^! I6 ]2 {: O1 R   $-    显示shell的当前选项,与set命令相同
    # L% C; {" L) n1 q   $?    显示shell命令的退出状态,0表示无错误,其他表示有错

    " s1 U6 o0 l' g- h- ~) j  J. INo.015 引号
    1. 双引号("") 其中引用的变量会替换为变量值。比如: / t4 g" y( K' n2 l
        [wangyb@localhost bash]$ STR="Hello world"
    5 ^6 a( o5 k9 L1 M& ^. W+ C2 Y  B    [wangyb@localhost bash]$ echo "$STR"
    % L9 t2 I. t9 r: i0 |* b3 [    Hello world ( j& \1 `( _, C. J) b! F* Z
    2. 单引号('') 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。比如: 3 y9 c: N+ c+ d  I9 ]
        [wangyb@localhost bash]$ STR="Hello world"
    9 p1 X" j1 J8 o/ q6 O: g: Z  g% I    [wangyb@localhost bash]$ echo '$STR'      ( I& Y/ |" s7 P1 ^0 z- p
        $STR , @0 Q; ^* E' j# z4 I
    3. 单引号和双引号同时使用时,谁在外面谁起作用。比如
    - V5 @+ |  G9 U$ }  K& C    [wangyb@localhost bash]$ echo "'$STR'"
    2 y- P" x( R' {    'Hello world' ! N5 w3 x7 m) Q1 y6 w0 `$ \; P
        [wangyb@localhost bash]$ echo '"$STR"'
    & u* o7 s8 Y5 p+ C. t, u    "$STR" 7 b9 i' f9 i* }8 _
    4. 反引号(``) 反引号中的内容被当做命令来执行。比如
      S9 y- W! v4 B! s2 b    [wangyb@localhost bash]$ VAR=`date`
    ( L+ J, p9 l+ J) U" A. P; c    [wangyb@localhos bash]$ echo $VAR 2 P- E. H- j8 g* {1 y
        Thu Dec 22 22:08:07 JST 2011
    2 c  @; P9 e5 b6 g1 i7 ]% m5. 转义符(\)
    * n5 a7 N& Y- R* n6 L9 y( L' B9 J
    No.016 Shell脚本介绍
    1. 脚本的第一行一般以  #!/bin/bash  开始
    5 \3 M! x, P$ b2. 给脚本加入执行权限后就可以运行脚本了
      A2 Q! m5 E4 ]. ^: }" N
    #No.017 条件测试
    1. 测试语法  test condition 或者 [ condition ] 使用方括号是注意在condition两边加上空格 1 I, _6 O: D) K4 ], E" a  C! o
    2. 文件状态测试
    % ^  G, R4 L4 t, g$ |   -d    目录            -s    文件长度大于0 2 Z+ O2 q; v  s
       -f    正规文件        -w    可写 2 ~9 _6 O1 t: v
       -L    符号连接        -u    文件有suid位设置
      [+ x+ F  C8 k$ Z" P* _$ A   -r    可读            -x    可执行 $ Q4 M+ ]1 B* Z3 S' O( R5 v8 C9 [
       例子如下:测试是否为目录,也可以用 test -d bash.sh 来代替方括号 ( s" S$ z- }: e- F% W7 v  i
        [root@localhost bash]# [ -d bash.sh ]
    ) u# `/ q0 p+ O3 Y+ p- F    [root@localhost bash]# echo $? - l1 S+ x) y6 ^7 @% l+ o, ~+ Y
        1
    0 X: K0 Q( m$ G( d3 u    [root@localhost bash]# [ -d . ]      
    6 ?7 o. Z# A6 G6 G' o0 ]4 ^    [root@localhost bash]# echo $?
    - X" N& o7 ~- o$ k    0
    9 ^; a* q0 D7 p' U1 ?3. 逻辑与 -a  逻辑或 -o  逻辑否 ! 例子如下:
    5 z! O! T8 y, c# S4 h' v    [root@localhost bash]# [ -d bash.sh -a -d . ] & J5 Y8 f6 M7 g+ N7 o
        [root@localhost bash]# echo $? 2 V5 @7 g% h2 r- C. {
        1 1 y) x% P8 Z# B( H: M
        [root@localhost bash]# [ -d bash.sh -o -d . ]  
    3 z, d; B1 V: B7 Y    [root@localhost bash]# echo $?
    5 n2 i; y4 Q5 d3 E0 \6 D1 n    0
    ; A: a# j9 U. T7 o    [root@localhost bash]# [ ! -d bash.sh -a -d . ]   
    8 W5 [7 t% {$ L& E    [root@localhost bash]# echo $? # u# {" B: X4 j" M8 V; \  b
        0
    . w! A. U- H6 \5 t6 {) h+ U, d- d, Z    [root@localhost bash]# [ ! -d bash.sh -a ! -d . ] + o, Q) ^6 H$ w$ R' V
        [root@localhost bash]# echo $?
    ( M; N# |1 E$ E* c& m: }$ O    1
    & |. k) e% X+ d. {2 p4. 字符串测试  [ string1 string_operator string2 ] 或者 [ string_operator string ] 7 [3 P3 ^; u' _
       string_operator可为:=      两个字符串相等
    7 T+ _& L4 Z; [* o2 Y- i                        !=     两个字符串不等
    4 s% J* H: l9 z. h4 r                        -z     空串 ' Y3 ]% ^% @) A9 F; I
                            -n     非空串 ! A  E- d- W6 Z9 z# C1 w8 ~, u. I
    5. 数值测试  [ "number1" num_operator "number2" ] : o7 J# G, O3 S  z8 w) @% m* B
       num_operator可为:  -eq     数值相等 4 H1 w/ i9 Q" d$ \7 i# n/ F2 p! J: Y1 F
                           -ne     数值不等 ( g$ m! F) Z" G) i4 @; @0 U
                           -gt     number1 > number2
      Z3 b- d2 B/ S                       -lt     number1 < number2
    6 n2 q! M% x# V8 Q1 i; H% r                       -le     number1 <= number2 ! j1 ~/ d3 m: y. e. O3 ~5 ?
                           -ge     number1 >= number2 & C. D* [3 P) T. ~* v5 W
       例子:   [root@localhost bash]# [ "100" -gt "101" ]
    2 ?* `8 T* d$ Q" T4 ~$ P# k            [root@localhost bash]# echo $?
    " k0 \. b0 X8 w  ]1 b            1 7 K8 i7 I- F* [# T! q3 H
                [root@localhost bash]# [ "100" -lt "101" ] ' N/ X' e7 L$ f7 Y& A3 k
                [root@localhost bash]# echo $?            # ?- L: u  M6 l  V6 B8 b
                0
    4 k2 _# X$ M+ J/ D' I$ T6. expr语法  expr arg1 operator arg2 8 W$ R: v: {2 k$ v1 P
       例子:变量自增 4 S/ r9 l) J4 d; J' c
                [root@localhost bash]# COUNT=1        , g7 @( k! G) T; A6 |$ P
                [root@localhost bash]# echo $COUNT    9 T) U. B6 `$ \" ^; v$ a9 f
                1
    - Z; ]& Y  z5 t4 d- K& F            [root@localhost bash]# COUNT=`expr $COUNT + 1`
    & N' o) O: R- v+ Y            [root@localhost bash]# echo $COUNT            
    ' B9 b) a$ _/ f1 G1 a# L: N2 `. _2 E            2
    . E1 d& `; L- O$ M9 }5 E2 I( l# m9 p+ o
    No.018 控制流结构
    1. if语句格式 5 V$ l4 _+ }4 h4 k* |+ f
       if 条件1
    & i8 Y6 }! _1 j, ?$ {' M9 X6 P$ \; W   then " Z% `% |2 }9 K+ Z& u
            执行命令1
    9 O7 I6 I5 C. |5 c& Z! U5 Y% x   elif 条件2
    2 y* w8 h* V' {  ^! Q   then
    5 [! v2 E& P. D4 P9 E" K$ t        执行命令2 ! d* |# c) l- |. w: v  f3 V
       else 9 V9 l) |. U# k) D
            执行命令3 - H# J1 Q  L3 z" U, ]- q
       fi . n: O8 T+ C7 d6 z5 B
    2. case语句格式
    5 u) r. a: g' \) ^   case 值 in
    ' i) o6 q( A' t, F* k- \   模式1)
    8 j$ u6 h! ~8 D5 a, U0 T. ^6 d       命令1 * f1 h2 j3 B- A; t
           ;; / o* p( W* d# }) ?# E) r
       模式2) ' F+ ^$ U7 x' c& m0 ?( I5 q
           命令2 9 y7 ]+ D/ H4 x2 B% N
           ;; # C2 Z) v, N& {
       ...... . s( f6 y0 d! R8 L
       easc
    1 g8 b. E# a/ h: [, m其中的“模式”可以是 *(任意字符), ?(任意单字符), [..](范围内任意字符) / _, o( B. M1 j; j; v. x
    “模式”中还可以是使用 | (比如 str1|str2 表示str1和str2都可以)
    5 A+ R  i- S; w5 R( Y0 q) J/ W( y7 [3. for语句格式 2 S# L5 ]+ _' Y4 _# e
       for 变量名 in 列表 # Q. S1 R6 o3 M6 C
       do 8 N$ v. A0 C. r3 m& k( \
           命令1 2 Z3 y  o6 s+ X/ o5 a9 \9 J, w
           命令2 ...... . `% ?) h' K" j1 P: v0 V
       done 4 j) b- I$ X4 b" ?0 u3 Y
    4. until语句格式 8 P7 ~2 g$ }- _/ @* u, X, U
       until 条件
    & Q2 B5 ~* M' S( u$ F         命令1
    0 {, w- k/ K6 J$ ]7 b% k. s         ......   N/ a0 h( v* P. B3 }
       done 5 P4 R1 _  @5 L6 z
    一直执行至条件为真时才结束,至少执行一次
    + s$ M/ O7 D( }5. while语句格式
      Z3 i, Y5 R* K7 D   while 条件
    ( T" Z8 X. Y( e: a3 H1 a, u3 y; F1 V         命令1
    * I, G0 c0 g6 @, w8 Q4 y5 B$ j" ^0 }         ...... 4 L# N0 E/ I8 d- E+ a. g6 L6 U
       done 9 q% Y- f5 ^6 ~( N0 T9 F1 l5 M
    6. 利用IFS来改变读取内容的分隔符 # w) `# A1 Y( `4 n1 _% e. o* z
    7. 利用break和continue控制循环的执行

    # d+ Q' @. M- ^0 C2 Z* lNo.019 Shell函数
    1. shell函数格式 & J' ]$ `4 i1 m0 O) t
       函数名 () 2 `9 _' A. c+ Q: h* _$ y  J
       {
    % }: K. _+ t; C. E7 [$ Z2 B       命令1
    ' F4 |, @3 \5 t6 S. a# O9 Z+ l       ...... 5 H2 |% @" V& E% ?# i$ ?
       }
    7 V# J5 ?! ^0 [* H- N或者
    - e) V; r  S6 E# f9 {   function 函数名 ()
    $ L9 ~$ n7 Z# q0 g5 q5 |   { % Y# t0 a$ t% N
           命令1
    2 @& G* b9 V& M) |# h$ Q* I, G       ......
    9 L. J5 b: M! e8 o   } ; m% Z' E5 A& F9 K. I3 a# u
    2. 引用其他脚本中函数  . /pathname/funcfile (<点><空格><斜线><文件完整路径名>或者<点><空格><文件相对路径名>) ( S: ^% V- c: r! z
    3. 函数中通过 $1, $2,......$9来获取参数
    / u* C0 A% a) D! ^& [; f: R
    No.020 向脚本传递参数
    1. 使用shift依次获取各个参数,比如 ' M( ^4 N( A' M6 T
       while [ $# -ne 0 ] ; {  Z$ j; |2 L5 i- m' w
       do " k( s7 c0 M: U) q1 J6 s
             echo $1  # 通过shift,$1将依次表示各个参数
    , @, n4 j: |& D/ A7 D( ]         shift
    4 d- b$ i. t$ p   done
    , E/ j3 @+ q3 E1 w3 h+ f2. getopts语法格式 getopts operation-string variable。
    ' `6 V+ N6 s9 i% ~2 F3 m2 h9 u
    No.021 屏幕输出
    1. tput 控制屏幕上的字符输出,比如加粗字符,隐藏光标等等   K+ n" z: a8 Q8 i7 q0 W
    2. 改变字符颜色的方法,比如 - H) i3 L7 U. T! ?0 p
       echo "<CTRL-V><ESCAPE>[40;32m"   设置背景黑色(40), 字符绿色(32)
    1 c- D$ @, Y; q' v7 T
    No.022 屏幕输入
    1. 输入时进行validation check
    & H2 w2 w* M& X$ z0 l' \9 Z7 x   “送进的是垃圾,出来的肯定是垃圾”

    4 x) O4 N* n- R$ m! a" nNo.023 调试脚本
    1. shell不会对错误进行精确定位,当shell打印错误后,需要观察报错的整个代码段 9 w% t) a1 F2 t
    2. 在脚本中利用set命令辅助调试
      c/ T# _; ^* `2 J& w1 M' ^$ A   set -n    读命令但不执行 2 ~5 ~# k% _+ h* p3 @; [9 J
       set -v    显示读取的所有行
    ! r2 R' k, P, u* n; W   set -x    显示所有命令及参数   H7 }9 `% Q: |
       - 表示打开; + 表示关闭;set +x 表示关闭显示所有命令及参数
    . }) L; V2 J. A' H' h0 ]0 O
    No.024 shell 嵌入命令
    1. set 命令在脚本中设置脚本的运行参数
    6 s* V+ L; H) @, G, ?2. times命令打印shell消耗时间和运行命令消耗时间 ??? % n  }* f: S) h- k9 S4 I
    3. type 命令查询命令是否有效及命令类型
    9 @: h( C$ o% d+ H/ u- g5 s1 `4. ulimit 命令设置运行在shell上的显示限制 ; p6 Q$ }# w* P" B! `
    5. wait 命令是父进程等待子进程完成
    * A$ N7 a* k' c
    No.025 深入讨论<<
    1. 创建文本  ex. cat >> file <<end + z& I' C" c5 A% a$ D6 o6 @, j
                     > (输入内容)
    9 A* R* |  Q+ [" W5 f                 > end
    * \6 L6 `$ I% n, w  l0 w   (输入内容)将被追加到file中

    9 ^* D  k+ G" Y% M3 INo.026 shell工具
    1. 用日期做文件名,ex.  $ Myfile=`date +%Y%m%d%H%M%S`
    * J  L: |* y" f# M* R' x) }                        $ touch $Myfile - {3 C- q0 G/ ~0 W# {$ |
    2. 脚本中的临时文件名中加入进程号,可以保证文件名唯一,并在脚本结束时删掉文件 - \; M8 [9 c( t/ N/ q( o
       ex. TmpFile1=/tmp/tempfile1.$$ + {9 a+ L% E' h. n
           TmpFile2=/tmp/tempfile2.$$
    / Y) y2 l& S* \7 B       rm /tmp/*.$$ $ y  g" O5 y% J: N3 l) V
    3. 常用信号 % d- ?, s9 `0 A' F, v3 [
       信号    信号名        含义 ) f+ k5 n4 n4 T0 I+ T! a, u
       1       SIGHUP        挂起或父进程被杀死
    # s4 L" {; M) K: G% i   2       SIGINT        来自键盘的中断信号,通常是<CTRL-C>
    - h: ^# ]$ I4 S; @8 L1 H$ U   3       SIGQUIT       从键盘退出 4 z! K2 a' e& n% D# ^
       9       SIGKILL       无条件终止 $ H/ F( [7 n( z  _8 r1 U
       11      SIGSEGV       段(内存)冲突 # P: q- X0 d, g8 e+ L/ l( L
       15      SIGTERM       软件终止(缺省杀进程信号)
    % s% @  g, B. f7 V% ]2 d3 @5 i4. trap 捕获信号 语法 trap "do-something" signal(s) / {8 D" b7 k5 g
       ex.  trap "" 2 3           忽略信号2和信号3,用户不能终止该脚本 7 e) \1 @8 P: Y' u+ d
            trap "commands" 2 3   如果捕捉到信号2和信号3,就执行相应的commands
    & x. e3 }# k/ L) _: l5 H$ K" |        trap 2 3              复位信号2和3,用户可以终止该脚本 + u6 b' Z' J# l/ T  g# e
    5. eval 对变量进行2次扫描 比如: ! c) f7 L, q$ R' b
            [wangyb@localhost bash]$ VAR1="cat a.sh"
    $ F, u) V; o4 w2 M  `        [wangyb@localhost bash]$ echo $VAR1
    0 z! p; ~9 `+ v0 F) w+ }; \% k9 e        cat a.sh , d9 d, j$ g, C% h+ ~  R0 g
            [wangyb@localhost bash]$ eval echo $VAR1  - ~4 A5 E) B% r  E5 [
            cat a.sh : J" L" Z7 ~; K( K
            [wangyb@localhost bash]$ eval $VAR1     : P2 K$ I$ H) S" P
            #!/bin/bash + ~6 M: V- _0 l0 ~( [( }5 I/ d
            TMP='HELLO'
      C8 l6 V3 l* |/ v5 g        sleep 2 + H8 b4 o- O1 i
            times 2 T+ [; g, d! ^4 `! W3 N
    6. 获取命令行的最后一个参数: ex. $(eval echo \$$#) 6 P. l$ l8 Y- R8 z  C- _
    7. logger 命令记录日志

    1 z6 K$ t& Z4 m8 kNo.027 几个脚本例子
    # 作者常用的几个脚本
    No.028 运行级别脚本
    1. 确定当前的运行级别:who -r + D( I: X8 b  O3 S7 d' I$ o8 B
    2. 运行级别含义
    % f5 L# U/ ^' _- l' `( ^) I   运行级别0    启动和停止整个系统
    : F% G! B4 h) v: t3 o; i+ I   运行级别1    单用户或管理模式
    # i& J8 ^7 ]+ E* e/ R" g0 u   运行级别2    多用户模式;部分网络服务被启动。
      ~9 B/ z& D& L7 |   运行级别3    正常操作运行模式,启动所有的网络服务
    2 p- K0 y0 i  B   运行级别4    用户定义的模式,可以使用该级别来定制所需要运行的服务 & S) n# D+ p0 \/ L) |% u; C/ q
       运行级别5    有些Unix操作系统变体叫起作为缺省X-windows模式 ' H; y2 H+ A: F- ?% c+ W
       运行级别6    重启动
    0 u' n5 v) P. C" s: K5 ^
    No.029 cgi脚本
    # 感觉现在应该不会有人用bash来开发web程序了吧
    No.030 常用shell命令
    1. basename : basename path 6 l. ]# G( W9 l& [3 z' D( c
    2. cat : cat optiones file 1 l7 p: O7 \1 K
           -v 显示控制字符
    3 i! U8 o  S0 P5 {2 ?0 s* I% U3. compress : compress options files
    " _3 \: T- N2 @8 r" O8 C2 A       -v 显示压缩结果
    8 f+ v8 X. A+ Z& s4 W( u4. cp : cp options file1 file2
    4 e+ c% u, }5 D8 S       -i 覆盖文件之前提示用户确认
    : M9 S9 S/ s8 R, {$ y; H- v# A       -p 保留权限模式和更改时间
    7 E9 d0 R! G/ P# P# [( Z" {+ b       -r 拷贝相应的目录及其子目录 3 n  [) E/ {- u
    5. diff : diff options file1 file2
    " e  [! Y2 u; u0 C       -c 按照标准个数输出 - B! I3 Q( G& a/ ?+ k
           -I 忽略大小写
    3 ^( l- @& X2 F9 D/ H/ O5 ]! q6. dircmp : dircmp options directory1 directory2
    8 i3 a6 r% k$ _- t  h       -s 不显示相同的文件 0 A: b1 U2 z( |! H, l
    7. dirname : dirname pathname ; r3 P7 Z" m' ^1 [! \5 n
    8. du : du options directory * u$ L1 e; p' O& Q6 v
           -a 显示每个文件的大小,不仅是整个目录所占用的空间 + P. F1 T4 J) Q" I3 @6 Y
           -s 只显示总计
    0 ^' D" E" t* W1 {9. file : file filename " ]5 D! i1 `5 F# J/ D& Y
    10. fuser : fuser options file & U% w$ H1 |2 Y4 Q; _# N: E
           -k 杀死所有访问该文件或文件系统的进程 5 H7 Q: Q  n0 Z" R) Y7 D8 d
           -u 显示访问该文件或文件系统的进程 1 s# U) r6 @! f' O7 X1 A# e
    11. head : head -number files
    . n4 E! C7 C1 K9 ^/ P12. logname : logname (显示当前使用的登陆用户名)
    ; U- j( v, \$ c. s( p13. mkdir : mkdir options directory * A8 o4 a4 s( X
            -m 在创建目录时按照该选项的值设置访问权限 + m4 ^6 m6 h( ~& G. e0 p& `) O8 O/ |
    14. more : more options files & Y" A+ y3 G% \+ G, Y
            -c 不滚屏,而是通过覆盖来换页
    6 w/ q. Q/ r5 k        -d 在分页处显示提示
    2 l$ z. z$ X: s; O1 M  d+ ]# @' l+ O        -n 每屏显示n行 7 M/ \/ G( L4 P, O
    15. nl : nl options file : s- v, }1 h+ }& ?& i; `( r: @
            -I 行号每次增加n;缺省为1 9 u2 Z: r5 {( w$ H  G8 O5 i
            -p 在新的一页不重新计数 / Y8 ^2 n9 b# @( u
    16. printf : printf format arguments 9 M/ G0 t- `$ Y6 Q
    17. pwd : pwd 8 Z! ?- z) g, W" r
    18. rm : rm options files 3 C/ Z! F! a1 Z0 q5 ]5 j
            -i 在删除文件之前给出提示(安全模式)
    8 T9 _6 P$ ?$ I+ L; {        -r 删除目录
    . F# t3 _2 x; t. M, D' T1 Y8 Y19. rmdir : rmdir options directory + i3 w) R3 `. \8 g7 s
            -p 如果相应的目录为空目录,则删除该目录
    9 {+ G& j. u2 T' J" V3 [) q20. script : script option file ) P. ^3 V' M" ~* q
            -a 将输出附加在文件末尾 " B8 [: N6 M3 @( b
    21. shutdown : shutdown now
    % d: V; P  x* l22. sleep : sleep number(秒数)
    9 B- G# H0 V$ h: q9 K2 H/ b23. strings : strings filename (查看二进制文件中的文本) ) l5 A  K' S6 {, n. Z
    24. touch : touch options filename
    + L7 ~3 Y# X) W! g# r6 u, u        -t MMDDhhmm 创建一个具有相应月,日,时分时间戳的文件 ! }+ a# S4 {7 q; m" i
    25. tty : tty 显示所连接的设备或终端 . T3 R2 b8 N: P0 {! v
    26. uname : uname options 3 A8 m2 m$ V" l% m, _7 O9 q0 o8 R
            -a 显示所有信息
    4 t! H% ~; [  Z        -s 系统名 / I2 |0 ^7 u+ ~, K2 m" W
            -v 只显示操作系统版本或其发布日期 2 c" O) O0 h- }' X2 D4 ]1 E
    27. uncompress : uncompress files 7 S7 z" l$ G( v- B. V$ X1 t
    28. wait : wait processID 2 Q: m: e/ u! e& C2 @
    29. wc : wc options files ; V2 J1 K0 Z6 `! j* D
            -c 显示字符数 % n- H* k* Y6 x- a# w( H
            -l 显示行数
    * @% W" L+ e+ X; @1 {* V1 K. v! S        -w 显示单词数 8 m: X# P0 P5 L! h4 L
    30. whereis : whereis command_name 3 e  K$ u4 L0 M# e$ m) E$ T
    31. who : who options
    # `4 J5 b! Z6 D8 o9 I        -a 显示所有的结果
    # a. ]& E9 \7 e        -r 显示当前的运行级别
    ) e, n0 U# M- _        -s 列出用户名及时间域
    4 U5 v4 ^4 J5 Y  r
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-8-28 18:01 | 只看该作者
    Linux shell笔记
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-28 08:13 , Processed in 0.078125 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表