zoukankan      html  css  js  c++  java
  • shell脚本编程入门

    Linux的Shell种类众多,这里我们关注的重点是Bash。

    基本语法

    • 环境变量$PATH
    • IO重定向: 
      • <改变标准输入 
        • 如:tr -d '\r' < dos-file.txt
      • >改变标准输出 
        • 如:tr -d '\r' < dos-file.txt > UNIX-file.txt(如果>的目的文件不存在,将自动创建,若存在,将覆盖原文件)
      • >>附加到文件(文件末尾追加) 
        • 若文件不存在,则自动创建,若存在,则在文件末尾追加
      • |建立管道 
        • 前一个program的输出作为后一个program的输入(program1 | program2),如:ls | grep a
    • 特殊文件:/dev/null/dev/tty

      • /dev/tty:输入密码时,默认不打印输入的密码到终端,例如:(-echo 用来关闭打印输入,echo打开)

            printf "Enter new password: "
            stty -echo 
            read pass < /dev/tty
            printf "Enter again: "
            read pass2 < /dev/tty
            stty echo
            ...

    常用命令:

    • who:查询系统的登陆用户
    • cat > 文件名 :将后面的输入信息重定向到文件中,以 ^D 结束
    • tr:转换字符 
      • -d:删除source-char-list所列举的字符,如:tr -d '\r' < dos-file.txt | sort > UNIX-file.txt,将dos-file.txt中的回车符全部删掉,再排好序重定向到UNIX-file.txt文件中
    • sh (执行一个脚本) 
      • -x显示脚本中的每个命令,以+开头,可以在脚本中打开追踪功能, set -x,用set +x关闭追踪
    • grep
    • sed
    • cut
    • awk
    • sort
    • uniq :(去重)
    • head -n n 查看前n行
    • tail -n n 查看后n行

    • umask

    命令使用注意事项

    • -开头表示选项,以--开头表示长选项
    • 多条命令写在一行,以;分隔

    脚本的语法说明:

      1. #! 脚本解释器路径开头,如:#! /bin/sh
      2. 变量 
        • 命名:字母或下划线开头,后面可以是字母数字,下划线
        • 赋值:变量名=值(注意等号前后不能有任何空格,变量值之间有空格时,需要用引号括起来),单行多次赋值,之间用空格分隔
        • 使用变量:以$变量名
        • 输出: 
          • echo 
            • echo 参数(参数以空格分隔)
          • printf 
            • 不会自动换行,需要换行,需在末尾加上\n
            • 例句:printf "the first program always print %s,%s" hello world (\d表示十进制整数)
      3. 再shell脚本中访问shell脚本的参数 
        • 读取第n个参数,通过$n读取,若n的数值大于9,则需用大括号括起来,如${10},读取第10个参数

    利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

    1 #!/bin/sh
    2 #comments
    3 Your commands go here
    首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。文件名后缀sh表明这是一个Bash脚本文件。
    执行脚本的时候,要先将脚本文件的属性改为可执行的,然后再执行:
    #将属性改为可执行
    chmod +x filename.sh
     
    #执行shell文件
    ./filename.sh
     
    简单的hello world例子(test.sh):

    注:“=”号左右无空格

     相关的变量命令
    env用于显示用户环境区中的变量及其取值;set用于显示本地数据区和用户环境区中的变量及其取值;unset用于删除指定变量当前的取值,该值将被指定为NULL;export命令用于将本地数据区中的变量转移到用户环境区。
    实例:

    #!/bin/sh
    #exist test.sh?
    if ls -l test.sh; then
      ./test.sh
      if [ "$1" = "me" ]; then
        printf "I like you\n"
        printf "You are the best!\n"
      else
        echo "You are ugly"
      fi
    else
      echo "return false"
    fi

    输出结果:

    不断更新中。。。。

  • 相关阅读:
    macos linux 命令行显示当前全路径方法
    mac 下面使用apidoc 使用
    du 统计文件夹大小
    mac 共享文件和mount挂载数据
    linux与linux、windows之间文件共享的几种方式
    Yaf安装和配置
    设计模式之 里氏替换原则
    设计模式之单一职责原则
    微信支付 遇到问题总结
    bash shell 快捷键
  • 原文地址:https://www.cnblogs.com/selinaniur/p/9437067.html
Copyright © 2011-2022 走看看