# 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. HDU 5661 Claris and XOR 贪心

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5661 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  2. 周总结web未完成的代码

    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...

  3. JSON.parse与eval

    文章:JSON.parse 与 eval() 对于解析json的问题 json的标准格式:{"name":"jobs"}   名字和值都必须用双引号引起来.

  4. lintcode-488-快乐数

    488-快乐数 写一个算法来判断一个数是不是"快乐数". 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...

  5. PAT 甲级 1008 Elevator

    https://pintia.cn/problem-sets/994805342720868352/problems/994805511923286016 The highest building i ...

  6. [学习]WireShark 的过滤功能

    1. 打开 wireShark 过滤显示 协议 比如显示arp协议 过滤栏输入arp即可 支持的协议类型 TCP UDP HTTP FTP ICMP SMTP等等 2. 过滤ip地址 ip.addr ...

  7. java 数据结构与算法 之查找法

    一.二分查找法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找:如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. @Test public ...

  8. [LeetCode] [LeetCode] Populating Next Right Pointers in Each Node II

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  9. 第107天:Ajax 实现简单的登录效果

    使用 Ajax 实现简单的登录效果 Ajax是一项使局部网页请求服务器信息,而不需整体刷新网页内容的异步更新技术.这使得向服务器请求的数据量大大减少,而且不会因局部的请求失败而影响到整体网页的加载. ...

  10. 【uoj#22】[UR #1]外星人 组合数学+dp

    题目描述 给你一个长度为 $n$ 的序列 $\{a_i\}$ 和一个数 $x$ ,对于任意一个 $1\sim n$ 的排列 $\{p_i\}$ ,从 $1$ 到 $n$ 依次执行 $x=x\ \tex ...