美文网首页
# shell快速入门

# shell快速入门

作者: 杨健kimyeung | 来源:发表于2020-07-22 10:30 被阅读0次
    资产负债表.png

    简介

    shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理,

    Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户

    常见的shell

    shell分类

    • bash(常见)

      • bash shell 是 Linux 的默认 shell
    • zsh

    • sh

    • csh

    • ash

    查看当前的shell

    • cat /etc/shells

      • /bin/sh
      • /bin/dash
      • /bin/bash
      • /bin/rbash
      • /bin/zsh
      • /usr/bin/zsh

    查看默认的shell

    • echo $SHELL
    • /bin/bash

    切换shell

    • 切换bash chsh -s /bin/bash
    • 切换zsh chsh -s /bin/zsh

    小技巧

    • 按tab键可以补全命令

    注释

    • 单行注释

    • 多行注释

      :<<EOF
      注释内容...
      注释内容...
      注释内容...
      EOF

    linux命令

    echo "some text": 将文字内容打印在屏幕上

    ls: 文件列表

    wc –l filewc -w filewc -c file: 计算文件行数计算文件中单词数计算文件中的字符数

    cp sourcefile destfile: 文件拷贝

    mv oldname newname : 重命名文件或移动文件

    rm file: 删除文件

    grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt

    cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b 5-9 file.txt

    cat file.txt: 输出文件内容到标准输出设备(屏幕)上

    file somefile: 得到文件类型

    read var: 提示用户输入,并将输入赋值给变量

    sort file.txt: 对file.txt文件中的行进行排序

    uniq: 删除文本文件中出现的行列, sort file.txt | uniq

    expr: 进行数学运算, expr 2 "+" 3

    find: 搜索文件, 根据文件名搜索find . -name filename -print

    tee: 将数据输出到标准输出设备(屏幕) 和文件, somecommand | tee outfile

    basename: 返回不包含路径的文件名比如, basename /bin/tux将返回 tux

    dirname file: 返回文件所在路径比如, dirname /bin/tux将返回 /bin

    head file: 打印文本文件开头几行

    tail file : 打印文本文件末尾几行

    sed: 基本的查找替换程序。可以从标准输入(如命令管道)读入文本,并将结果输出到标准输出(屏幕),采用正则表达式进行搜索, 将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file

    awk: 从文本文件中提取字段。缺省字段分割符是空格,可以使用-F指定其他分割符, cat file.txt | awk -F, '{print 1 ","3 }'以","为字段分割符,同时打印第一个和第三个字段。"Adam Bor, 34, IndiaKerryMiller, 22, USA"的输出结果为:"Adam Bor, IndiaKerry Miller, USA"

    第一个shell脚本

    vim hello.sh

    输入内容

    • ! /bin/bash

      echo "hello world"

      • 声明执行脚本的解释器
      • 在控制台输出 hello world

    保存退出

    • esc
      :wq

    给hello.sh授权

    • chmod +x hello.sh

    执行脚本

    • 指定解释器 执行文件

      bash hello.sh

    • 或者使用默认的解释器执行

      ./hello.sh

    调试

    • echo:最简单的调试命令
    • sh -x myscript:执行该脚本并显示所有变量的值
    • sh -n myscript:检查语法,语法错误

    特殊概念

    管道 |

    • 将一个命令的输出作为另外一个命令的输入
      可以使用多个命令

    • 例如

      • 在file.txt中搜索包含有"hello"的行并计算其行数, grep "hello" file.txt | wc -l

    重定向 > 与 >>

    • 将命令的结果输出到文件,而不是标准输出(屏幕)

    • 写入文件并覆盖旧文件

    • 加到文件的尾部,保留旧文件内容。

    反短斜线 -

    • 以将一个命令的输出作为另外一个命令的一个命令行参数
    • 查找过去24小时内修改过的文件并打一个包, tar -zcvf lastmod.tar.gz find . -mtime -1 -type f -print

    基础语法

    变量

    • 命名建议规则

      • 变量名大写
      • 局部变量小写
      • 函数名小写
      • 名字体现出实际作用
    • 常见的系统变量

      • $SHELL

        • 默认 Shell
      • $HOME

        • 当前用户家目录
      • $PWD

        • 当前目录
      • $USER

        • 当前用户
      • $PATH

        • 默认可执行程序路径
      • $UID

        • 当前用户 ID
      • $HOSTNAME

        • 主机名
    • 普通变量

      • 语法格式

        • 变量名=值
        • 注意等号两边不要有空格
      • var=value

    • 临时环境变量定义

      • export var=value
    • 特殊变量

      • $0

        • 脚本自身名字
      • $?

        • 返回上一条命令是否执行成功,0 为执行成功,非 0 则为执行失败
      • $#

        • 位置参数总数
      • $*

        • 所有的位置参数被看做一个字符串
      • $@

        • 每个位置参数被看做独立的字符串
      • $$

        • 当前进程 PID
      • $!

        • 上一条运行后台进程的 PID
    • 使用变量

      • $变量
      • ${变量}

    参数传递

    • 特殊变量

      • $#

        获取传递参数的个数

      • $*

        以字符串的形式显示所有参数

      • $$

        脚本运行的当前进程ID号

      • $!

        后台运行的最后一个进程的ID号

      • $?

        检测脚本 0表示没有错误,其他任何之都是表明有错误

    • 示例代码

      • !/bin/bash

    echo "shell 传递参数"

    echo "执行的文件的名称:$0"

    echo "第一个参数为: $1"

    echo "第二个参数为: $2"

    数据类型

    • 数字类型

    • 字符串

      • 单引号,双引号

      • 区别

        • 单引号是告诉 Shell 忽略特殊字符,
        • 而双引号则解释特殊符号原有的意义,比如$、!
    • 数组

    基本运算符

    • 分类

      • 算术运算符
      • 关系运算符
      • 布尔运算符
      • 字符串运算符
      • 文件测试运算符
    • 说明

      • 原生bash不支持简单的数学运算,但可以使用其他命令实现 expr(最常用)、awk
    • 栗子

      • val=expr 2+2
        echo "求值结果:$val"
    • 其它

      !/bin/bash

      a=2
      b=3

      echo expr $a + $b
      echo expr $a - $b
      echo expr $a \* $b # 做乘法需要添加斜杠转义
      echo expr $b / $a
      echo expr $b % $a

      c=b echo "赋值后c的值:c"

      if [ a ==b ]
      then
      echo "a 等于 b"
      else
      echo "a 不等于 b"
      fi

      if [ b ==c ]
      then
      echo "b 等于 c"
      fi

      if [ a !=b ]
      then
      echo "a 不等于 b"
      fi

      if [ c !=b ]
      then
      echo "c 不等于 b"
      fi

    流程控制

    if:如果条件为真则执行then后面的部分

    • if ....; then
      ....
      elif ....; then
      ....
      else
      ....
      fi

    • 测试命令

      • [ -f "somefile" ] :判断是否是一个文件
      • [ -x "/bin/ls" ] :判断/bin/ls 是否存在并有可执行权限
      • [ -n "var" ] :判断var 变量是否有值
      • [ "a" = "b" ] :判断a 和b 是否相等
      • 执行 man test 可查看所有测试表达式可以比较和判断的类型

    快捷操作符

    • &&

      • 左边的表达式为真则执行右边的语句

        • [ "a" = "b" ] && echo "equal!"
    • ||

      • 左边的表达式为假则执行右边的语句

        • [ "a" = "b" ] || echo "different!"

    case:匹配一个给定的字符串,而不是数字

    • case ... in
      ...) do something here ;;
      esac

    select:从一组不同的值中进行选择

    • select var in ... ; do
      break
      done
      .... now $var can be used ....

    loop:循环

    • while-loop:运行直到表达式测试为真

      • while ...; do
        ....
        done
      • break:跳出循环
      • continue:不执行余下部分直接跳到下一循环
    • for-loop:查看一个字符串列表 (用空格分隔) 然后将其赋给一个变量

      • for var in ....; do
        ....
        done

    XMind - Trial Version

    相关文章

      网友评论

          本文标题:# shell快速入门

          本文链接:https://www.haomeiwen.com/subject/xllzkktx.html