• Shell编程基础


    Shell脚本

    命令、变量和流程控制语句等有机的结合起来

         shell脚本擅长处理纯文本类型的数据,而linux中,一切皆文件。
    

    默认shell与版本

    常用操作系统的默认shell

    1.Linux是Bourne Again shell(bash)

    2.Solaris和FreeBSD缺省的是Bourne shell(sh)

    3.AIX下是Korn Shell(ksh)

    4.HP-UX缺省的是POSIX shell(sh)

    其它shell

    zsh
    fish

    升级shell
    yum install update bash

    sh与bash;/bin与/usr/bin

    脚本书写规范

    #1.脚本统一存放目录

    #2.选择解释器
    #!/bin/bash
    #!/bin/sh

    #3.文件名规范
    名字要有意义,并且结尾以 .sh 结束

    #4.开发的规范和习惯小结

    1. 放在统一的目录

    2. 脚本以.sh为扩展名

    3. 开头指定脚本解释器。

    4. 开头加版本版权等信息,可配置~/.vimrc文件自动添加。

    5. 脚本不要用中文注释,尽量用英文注释。【目前还做不到,学习中CS英语中

    6. 代码书写优秀习惯

      a、成对的内容一次性写出来,防止遗漏,如[ ]、' '、" "等

      b、[ ]两端要有空格,先输入[ ],退格,输入2个空格,再退格写。

      c、流程控制语句一次书写完,再添加内容。(if 条件 ; then 内容;fi)ddd

      d、通过缩进让代码易读。

      f、脚本中的引号都是英文状态下的引号,其他字符也是英文状态。


    shell脚本的执行

    sh test.sh
    source test.sh
    ./test.sh


    Shell的变量

    变量可以分为两类:环境变量(全局变量)和普通变量(局部变量)

    环境变量也可称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程shell中使用,环境变量又可分为自定义环境变量和Bash内置的环境变量
    普通变量也可称为局部变量,只能在创建他们的Shell函数或Shell脚本中使用。普通变量一般是由开发者用户开发脚本程序时创建的。
    特殊变量

    #1.环境变量


    #2.普通变量

    本地变量在用户当前的Shell生存期的脚本中使用。值在用户当前Shell生存期中有意义,在Shell中启动另一个进程或退出,本地变量值将无效。

    export命令
    当前shell窗口及子shell窗口生效
    在新开的shell窗口不会生效,生效需要写入配置文件


    #3.环境变量相关配置文件

    /etc/proflie
    /etc/bashrc

    ~/.bashrc
    ~/.bash_profile

    /etc/proflie.d/ # 目录

    读取顺序
    ① /etc/profile
    ② ~/.bash_profile
    ③ ~/.bashrc
    ④ /etc/bashrc


    #4.环境变量的知识小结

    变量名通常要大写。
    变量可以在自身的Shell及子Shell中使用。
    常用export来定义环境变量。
    
    执行env默认可以显示所有的环境变量名称及对应的值。
    输出时用“$变量名”,取消时用“unset变量名”。
    
    书写crond定时任务时要注意,脚本要用到的环境变量最好先在所执行的Shell脚本中重新定义。
    如果希望环境变量永久生效,则可以将其放在用户环境变量文件或全局环境变量文件里。
    

    #5.变量中引号的使用

    只有在变量的值中有空格的时候,会使用引号。
    单引号与双引号的区别在于,是否能够解析特殊符号。
    



    1)内容是纯数字、简单的连续字符(内容中不带任何空格)时,定义时可以不加任何引号
    2)没有特殊情况时,字符串一律用双引号定义赋值,特别是多个字符串中间有空格时
    3)当变量里的内容需要原样输出时,要用单引号
    

    #6.定义变量名技巧

    1. 变量名只能为字母、数字或下划线,只能以字母或下划线开头。
    
    2. 变量名的定义要有一定的规范,并且要见名知意。
    
    3. 一般的变量定义、赋值常用双引号;简单连续的字符串可以不加引号;希望原样输出时使用单引号。
    
    4. 希望变量的内容是命令的解析结果时,要用反引号'',或者用$()把命令括起来再赋值。
    

    #7.特殊变量

    常用的特殊位置参数说明

    #!/bin/bash

    echo $0
    echo "第一个参数:" $1
    echo "第二个参数:" $2
    echo "第11个参数:" ${11}

    #!/bin/bash

    echo "参数个数:" $#
    echo "参数:" $*


    #8.进程状态变量


    #9.echo参数说明


    定义变量的方式

    1、直接赋值
    
    2、传参 (传递参数)
    
    3、交互式设置变量,使用read命令
    

    #1.read命令说明

    在命令行中使用

    在脚本中使用

    #!/bin/bash
    read -p '请输入:' test

    echo $test


    #2.定义方法实践

    直接赋值方法

    #!/bin/bash

    name='直接赋值'
    echo $name


    传参 (传递参数)

    #!/bin/bash

    name=$1
    echo $name


    交互式设置变量 read

    #!/bin/bash

    read -p "请输入您的账号:" userName
    read -s -p "请输入您的密码:" passWd
    sleep 3

    echo
    echo "您的用户信息账号:" $userName
    echo "您的用户信息密码:" $passWd


    变量的子串

    变量子串说明

    有关上述匹配删除的小结

    #表示从幵头删除匹配最短。

    ##表示从开头删除匹配最长。

    %表示从结尾删除匹配最短。

    %%表示从结尾删除匹配最长。

    ac表示匹配的突符串,表示匹配所有,a*c匹配开头为a、中间为任意多个字符、结尾为c的字符串。

    aC表示匹配的字符串,表示匹配所有,a*C匹配开头为a、中间为任意多个字符、结尾为C的字符串。

    有关替换的小结

    一个“/”表示替换匹配的第-个字符串。

    两个“/”表示替换匹配的所有字符串。


    Shell的特殊扩展变量说明


    变量的数值计算

    #1.仅支持整数的运算

    echo $((数学运算表达式))

    延伸产物

    i++ 自增1

    i-- 自减1

    ++i

    --i

    示例

    设i=1;
    i++先表达式值 1 ,再自增值 2 ;
    此时,再表达式值 2 ,再自增值 3 ;


    如上,此时值i=3;
    i--先表达式值 3 ,再自减值 2 ;
    此时,再表达式值 2 ,再自减值 1 ;
    此时,再表达式值 1 ,再自减值 0 ;


    如上,此时值i=0;
    ++i先自加,表达式值 1 ;
    此时,再自加表达式值 2 ;
    此时,再自加表达式值 3 ;


    如上,此时值i=3;
    --i先自减,表达式值 2 ;
    此时,再自减表达式值 1 ;
    此时,再自减表达式值 0 ;

    记忆方法:++,--
    变量a在前,表达式的值为a,然后a自增或自减,变量a在符号后,表达式值自增或自减,然后a值自增或自减。


    #2.let命令


    #3.expr 命令

    1.整数计算
    
    2.判断扩展名
    
    3.判断输入是否为整数,非整数返回值为2
    
    4.计算变量的长度
    

    非整数返回值为2 示例:


    #4.$[]运算符


    #5.typeset命令进行运算


    可以进行小数运算的命令

    #1.bc 命令

    交互模式与免交互模式


    #2.python 命令


    #3.awk 命令


    补充说明

    shell脚本中批量注释的方法

    <<'EOF'
    文件内容
    EOF
    

    或使用 exit可以注释其之后的所有内容(类似注释,实质为不执行后面的内


    搬运并学习,原博客

    https://www.cnblogs.com/clsn/p/7992981.html

  • 相关阅读:
    c++ string 和wstring 之间的互相转换函数
    Duilib教程-自动布局3-分隔条
    Duilib教程-自动布局2
    Duilib教程-自动布局1
    Duilib教程-非DUI控件
    Duilib教程-控件练习
    Duilib教程-HelloDuilib及DuiDesigner的简单使用
    Duilib教程-简单介绍
    把資源加载到内存中 BMP 出错
    LoadLibrary失敗,GetLastError 返回127錯誤
  • 原文地址:https://www.cnblogs.com/yachengmuCC/p/16123971.html
Copyright © 2020-2023  润新知