• learn shell


    the basic shell skills.
     
    • Bourne shell
      • sh
      • ksh
      • Bash
      • psh
      • zsh
    • C shell
      • csh
      • tcsh
     
    [root@bogon temp]# cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin
    /bin/tcsh
    /bin/csh
     
     
    1.echo
     
    [root@bogon temp]# echo "hello world!"
    -bash: !": event not found
    [root@bogon temp]# echo 'hello world!'
    hello world!
     
     
    2.sh
     
    sh script must declare #!/bin/bash at the begining
    you'd better show note 
     
    [root@bogon sh]# cat -A hello.sh
    #!/bin/bash$
    #Ryan$
    $
    echo "Hello World"$
     
     
    cat -A will print all character include . You can see, my script hava a $, this is the in linux, if in windows, it will be ^M$, you have to run dos2unix to convert it.
     
     
    3.Basis
     
     
    3.1.history
     
    show the history command you had typed
    history
    !n --execute the num n
    !!  --execute the laste , acturelly, we use ↑
     
    3.2.alias
     
    [root@bogon sh]# alias
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias vi='vim'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
     
     
    3.3 shortcuts
     
    ctrl+A     move to line start
    ctrl+E     move to line end
    ctrl+C     stop
    ctrl+L     clean
    ctrl+U   delete the command before the cursor
    ctrl+K    delete the command after the cursor
    ctrl+Y     paste the command that you ctrl+U/K
    ctrl+R     search from history
    ctrl+D     exit
    ctrl+Z     suspend and background
     
     
     
    4.command
     
    ls -a /etc/ | more
     
    grep 
    -i ingnore case
    -n show linenum
    -v negate
     
    var
    • =bothends can't be space
    • $var_name, ${varname}
    • `` ==$()
     
    envrionment
    parent-shell->sub-shell
    export var_name=var_value
    env
    unset var_name
    source profile, . ./profile
    • /etc/profile
    • /etc/profile.d/*.sh
    • ~/.bash_profile
    • ~/.bashrc
    • /etc/bashrc
     
     
     
     
    ? one
    * any
    [] the char inside[]
    [-] the char in the range of [-]
    [^] the  opposite char
    '' anything is char
    "" double quotation, specific char like "$"、"`"、""
    `` ==$()
    $() command to be var
    # note
    transfferred meaning
     
     
    var position
     
    $n $0-command itselt; $1-$9 the attr after command; beyond 10 ${10}
    $* all attrs as a attr
    $@ all attrs as attrs
    $# the sum of attrs
    $? the status of the last command : 0? correct:error
    $$ current PID
    $! last PID in backgroud
     
     
    read -t 30 -p "please input somethind :"  sm
    echo $sm
     
     
    caculate num
    • declare -i cc=$aa+$bb
    • dd=$(expr $aa + $bb)
    • ff=$(($aa+$bb))
     
     
    regular
     
    * behind char any times
    . one char
    ^ begin
    $ end
    [] any inside char
    [^] can be inside char
    transfer
    {n} n times behind. [0-9]{4}  ~ 1234; [1][3-8][0-9]{9} ~ tel
    {n,} at least n times
    {n,m} at least n times and at most m times
    .* any char any times
    .$ end with .
     
     
    output
     
    command >file         cover
    command >>file       append
    err command 2>file
    err command2>>file
     
    command>file 2>&1
    command  &>> file
     
    char cut
     
    cut
    -d seperator
    -f the index
     
    [root@00:09:13 /temp/project/sh]$ cut -d ":" -f 1,3 /etc/passwd
    root:0
    bin:1
     
    [root@00:13:16 /temp/project/sh]$ cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1,3
    amandabackup:33
    ryan:1000
    yue:1001
    yangmi:1002
    bimm:1003
    cangls:1004
    st:1005
     
     
     
    printf
    %ns:      n char
    %ni:       n num
    %m.nf     12.34
     
     
    awk
     awk [POSIX or GNU style options] -f progfile [--] file ...
     
     
    [root@00:24:15 /temp/project/sh]$ cat stu.txt
    name    age aa   
    mrf    12    bb
    ryan    18    vv
    [root@00:24:31 /temp/project/sh]$ awk '{printf $2 " " $3 " "} ' stu.txt
    age    aa
    12    bb
    18    vv
     
    [root@00:24:33 /temp/project/sh]$ df -h | awk '{print $1 " " $5 " " $6}'
    [root@00:29:04 /temp/project/sh]$ df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   50G  5.3G   45G   11% /
    devtmpfs                 1.6G     0  1.6G    0% /dev
    tmpfs                    1.6G     0  1.6G    0% /dev/shm
    tmpfs                    1.6G  9.0M  1.6G    1% /run
    tmpfs                    1.6G     0  1.6G    0% /sys/fs/cgroup
    /dev/mapper/centos-home  278G   37M  278G    1% /home
    /dev/sda6                497M  162M  335M   33% /boot
    tmpfs                    327M     0  327M    0% /run/user/0
    [root@00:29:12 /temp/project/sh]$ df -h | grep root | awk '{print $5}' | cut -d "%" -f111
     
     
     
     
    sed
     
    change the file line2
    sed -i '2c theReplaceMsg'  file
     
    p     printf
    d     delte
    a     append
     i     insert
    c     replace   line
    s     sed 'ns/old/new/g' file
     
     
    if
     
    [root@bogon sh]# [ "$aa"=="$bb" ] && echo yes || echo no
    yes
     
    -n var_name      if var_name!=null return true
    -z  var_name      if var_name==null return true
    ! var_name     opposite  
     
     
    if [    ]  ;then
      ....
    elif [    ]
         then
         ...
    else
         ...
    fi
    or
    if [   ]
         then
    .....
    fi
     
         
    case
     
    case $var_name in
         val1)
              ...
              ;;
         val2)
              ...
              ;;
         *)
              ...
              ;;
     esac
     
     
    for
     
    for var_name in val1 val2 val3 ...
         do
              ..
         done
     
     
    while
     
    while [  $i -le 100    ]
         do
              ...
         done
     
     
     
     
    5.Other
     
    ps
     
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1  41632  4060 ?        Ss   5月13   0:12 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    root         2  0.0  0.0      0     0 ?        S    5月13   0:00 [kthreadd]
    root         3  0.0  0.0      0     0 ?        S    5月13   0:05 [ksoftirqd/0]
    root         7  0.0  0.0      0     0 ?        S    5月13   0:00 [migration/0]
    root         8  0.0  0.0      0     0 ?        S    5月13   0:00 [rcu_bh]
    root         9  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/0]
    root        10  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/1]
    root        11  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/2]
    root        12  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/3]
    root        13  0.0  0.0      0     0 ?        S    5月13   4:18 [rcu_sched]
     
    top
     
    kill
     
    kill -1  restart
    kill -9  pid  (force)
    kill 15  pid  (default)
     
     
    crond
    crontab -e
     
     
     
  • 相关阅读:
    没吃过猪肉,却想见识下猪跑
    程序员修电脑
    csdn 新排名系统参考的部分指标
    如何快速适应新工作
    前端学习指北
    公号文章整理
    BUI 视频,音频在线播放
    原生图片上传,图片格式和图片大小处理
    获取路由拼接参数
    Axure RP9调用后端接口操作步骤
  • 原文地址:https://www.cnblogs.com/woshimrf/p/5503163.html
Copyright © 2020-2023  润新知