# Bash中自动补全时忽略大小写
# 编辑~/.inputrc(没有的话,就新建一个),在最后加一行:
set completion-ignore-case on
# 若要用方向键Up,Down来搜索以该串字符开头的历史命令,则在~/.inputrc中加入:
“\e[A”: history-search-backward
“\e[B”: history-search-forward

创建脚本:vim test.sh
    脚本内容:#! /bin/bash  #"#!"是一个约定标记,告诉系统用哪种shell来执行
              echo "Hello world!"
使脚本具有执行权限:chmod  +x ./test.sh
执行脚本:./test.sh     #注意,一定要写成./test.sh,而不是test.sh。若直接写成test.sh,linux会去PATH里面找寻有没有test.sh.

[shell注释]:以“#”开头的行为注释,shell没有多行注释
[输入输出命令]
    echo命令:echo $variablename #从stdout输出变量值variablename
             echo -e "\n"   #-e选项是用来激活转义字符,此处激活换行符\n
    printf命令:printf format-string [arguments...]
        format-string:s% d%
        arguments使用空格分割,不用逗号
        printf不会像echo那样自动换行,必须显示添加换行符(\n)
        参数多于格式控制符(%)时,format-string可以重用,可以将所有参数都转
    read命令:read name  #从stdin获取输入并赋值给变量name
[shell变量]
    定义:variablename="value"  #变量名和等号之间不能有空格
    使用:$variablename   #使用一个定义过的变量,只要在变量名前面加$符号
    重新定义:variablename="newvalue"  #直接覆盖就行
    只读变量:variablename="value"
              readonly variablename  #用readonly命令可将变量定义为只读变量,不可修改
    删除变量:unset variablename     #unset命令不能删除只读变量
    变量类型:局部变量,环境变量,shell变量

[Shell特殊变量]
    $0     当前脚本的文件名
    $n     传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $#     传递给脚本或函数的参数个数。
    $*     传递给脚本或函数的所有参数。
    $@     传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $*稍有不同,下面将会讲到。
    $?    上个命令的退出状态,或函数的返回值,0表示成功,其他值表示失败。
    $$     当前Shell进程ID。对于 Shell脚本,就是这些脚本所在的进程ID。

[命令替换]`command`  #``是反引号,位于ESC建下方,不是单引号
[变量替换]
    ${var}:变量本来的值
    ${var:-word}:如果变量 var 为空或已被删除(unset),那么返回word,但不改变 var 的值。
    ${var:=word}:如果变量 var 为空或已被删除(unset),那么返回word,并将 var 的值设置为 word。
    ${var:?message}:如果变量 var为空或已被删除(unset),那么将消息 message送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。若此替换出现在Shell脚本中,那么脚本将停止运行。
    ${var:+word}:如果变量 var 被定义,那么返回 word,但不改变var的值。

[Shell运算符]
    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如
    awk 和 expr,expr 最常用。如:val=`expr 2 + 2`
    注意:
        1.表达式和运算符之间要有空格,例如 2+2是不对的,必须写成2 + 2。
        2.完整的表达式要被` `包含,这个字符不是单引号,在Esc键下边。
[算术运算]:+,-,×,/,%,=,==,!=
    注意:
        1.乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
        2.条件表达式要放在方括号之间,并且要有空格,例如if[$a==$b]
        是错误的,必须写成 if [ $a == $b ]。
[关系运算]:-eq,-ne,-gt,-lt,-ge,-le
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
[布尔运算]:非!,或-o,与-a
[字符串运算]:=,!=,-z(长度为0为true),-n(长度不为0为true),str(非空为true)
[文件测试运算]

[Shell字符串]
    字符串可以用单引号,双引号,也可以不用引号。
单引号:
    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号:
    双引号里可以有变量,可以出现转义字符
获取字符串长度:${#string}
提取子字符串:${string:1:4}  #输出下标为1到4的字串,包括1和4,字符下标从0开始
查找子字符串下标:echo `expr index "$string" sub_string`

[Shell数组]
    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于等于0.
定义数组:
    在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:  array_name=(value1 ... valuen)
读取数组元素: ${array_name[index]}
使用@或×来读取数组所有元素:    ${array_name[*]}  或  ${array_name[@]}
获取数组的长度:
    # 取得数组元素的个数
    length=${#array_name[@]} 或 length=${#array_name[*]}
    # 取得数组单个元素的长度
    lengthn=${#array_name[n]}

Shell编程——bash基础知识的更多相关文章

  1. shell编程之基础知识1

    1.shell脚本的基本格式 #!bin/bash   ->看到这个就是shell脚本 #filename:test.sh ->脚本名称 #auto echo hello world -& ...

  2. 第一部分shell编程1基础知识

    ls etc/init.d/ shell脚本的路径 ls /usr/local/apache2/ ls /usr/local/apache2/bin/apachectl 1. shell特性命令历史 ...

  3. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  4. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  5. C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)

    异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...

  6. java第九节 网络编程的基础知识

    /** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...

  7. 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器

    计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...

  8. Shell编程入门基础上

    前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...

  9. Linux学习笔记(17) Shell编程之基础

    1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...

随机推荐

  1. P4语法(4)Control block

    Control block Control block之中用于放置设计好的Table和Action. 可以把control block认为是pipeline的一个模板,之前用的v1model中就是in ...

  2. 读我是一只it小小鸟有感!!!

    <<我是一只it小小鸟>>是老师为我们这些即将步入it行业的新人推荐的一本书,通过这本书的简介知道它是由一群it学子共同创造而成的,每个人分别讲述各自的成长经历.书的开篇是本书 ...

  3. 第5章 首次登录与在线求助man page

    首次登录系统 centos默认图像界面为GNOME. Linux默认情况下会提供6个Terminal来让用户登录,切换方式为ctrl+alt+[F1-F6],系统将这六个操作界面命名为tty1-tty ...

  4. CentOS7实现RabbitMQ高可用集群

    CentOS安装RabbitMQ集群 1.有3台已安装RabbitMQ的机器 192.168.38.133 rabbitmq1 192.168.38.137 rabbitmq2 192.168.38. ...

  5. Java compiler level does not match the version of the installed Java project facet. map解决方法

    右键项目"Properties",在弹出的"Properties"窗口左侧,单击"Project Facets",打开"Proje ...

  6. 三层神经网络自编码算法推导和MATLAB实现 (转载)

    转载自:http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724.html 前言: 现在来进入sparse autoencoder的一 ...

  7. Eureka服务注册过程

    上篇博客<SpringCloud--Eureka服务注册和发现>介绍了Eureka的基本功能,这篇我们来聊聊eureka是如何实现的. 上图是eureka的架构图,Eureka分为Serv ...

  8. 【转】MySQL数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  9. mysql中变量

    mysql中的变量: mysql中,有两种变量形式: 普通变量: 不带“@”符号: 定义形式: declare  变量名  类型名   [default  默认值]: //普通变量必须先这样定义 赋值 ...

  10. codepen & js demos

    codepen & js demos Mutation Observer & customize resize event listener & demo https://co ...