# 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. 404 Note Found 现场编程

    目录 组员职责分工 github 的提交日志截图 程序运行截图 程序运行环境 GUI界面 基础功能实现 运行视频 LCG算法 过滤(降权)算法 算法思路 红黑树 附加功能一 背景 实现 附加功能二(迭 ...

  2. lintcode-414-两个整数相除

    414-两个整数相除 将两个整数相除,要求不使用乘法.除法和 mod 运算符. 如果溢出,返回 2147483647 . 样例 给定被除数 = 100 ,除数 = 9,返回 11. 标签 二分法 思路 ...

  3. lintcode-397-最长上升连续子序列

    397-最长上升连续子序列 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列.(最长上升连续子序列可以定义为从右到左或从左到右的序列.) 注意事 ...

  4. lintcode-205-区间最小数

    205-区间最小数 给定一个整数数组(下标由 0 到 n-1,其中 n 表示数组的规模),以及一个查询列表.每一个查询列表有两个整数 [start, end]. 对于每个查询,计算出数组中从下标 st ...

  5. 敏捷冲刺DAY4

    一. 每日会议 1. 照片 2. 昨日完成工作 登录界面的进一步完善 服务器搭建 建立数据库 3. 今日完成工作 发布和提供需求功能的实现 用户修改自己的信息 用户界面设计 管理员界面设计 4. 工作 ...

  6. 【Leetcode】725. Split Linked List in Parts

    Given a (singly) linked list with head node root, write a function to split the linked list into k c ...

  7. 【Leetcode】179. Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  8. (转)Elasticsearch search-guard 插件部署

    我之前写了ELK+shield的部署文档,由于shield是商业收费的,很多人都推崇开源项目search-guard来做ELK的安全组件,准确来说是elasticsearch的安全组件.search- ...

  9. Filter2D卷积运算

    图像处理中的卷积运算一般都用来平滑图像.尖锐图像求边缘等等.主要看你选择什么样的核函数了.现在核函数很多,比如高斯平滑核函数,sobel核函数,canny核函数等等.这里举一个sobel核函数的例子来 ...

  10. PHP中与类有关的运算符

    与类有关的运算符: new, instanceof:判断一个“变量”(对象,数据),是否是某个类的“实例”: 示意如下: class  A {} class  B {} class  C extend ...