一、数据类型

1.shell变量

运行shell时,会同时存在三种变量:

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

1.1命名规则  

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

1.2引用变量

  $varible_name

  ${varible_name}

1.3只读变量

  readonly varible_name

1.4删除变量

  unset varible_name

  注意:unset不能删除只读变量

2.shell字符串

2.1单双引号区别

  

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

2.2获取字符串长度

  ${#str_name}

2.3提取字符串

  echo ${str_name:n:m}  从第N个起截取Mge字符(包括空格)

  

2.4查找字符串位置

  str="today is monday"

  echo `expr index "${str}" as char` (起始值为1)

  查找字符 m 或 o 的位置(哪个字母先出现就计算哪个):

  

3.数组

3.1定义数组

  array_name=(value0 value1 value2 ....)

  或array_name[0]=value1

3.2读取数组

  获取特定值:${array_name[n]}

  获取所有数值${array_name[@]}

3.3获取数组长度

  ${#array_name[@]}或${#array_name[*]}

  获取单个元素长度 ${#array_name[n]}

4.注释

4.1单行注释 #

4.2多行注释

二、shell传递参数

1.传递参数

1.1传递参数

  脚本中内容如下:

  1. #!/bin/bash
  2.  
  3. echo "Shell 传递参数实例!";
  4. echo "执行的文件名:$0";
  5. echo "第一个参数为:$1";
  6. echo "第二个参数为:$2";
  7. echo "第三个参数为:$3";

  为脚本设置可执行权限并执行脚本,结果如下:

  1. $ chmod +x test.sh
  2. $ ./test.sh 3 #传入了4个参数
  3.  
  4. Shell 传递参数实例!
  5. 执行的文件名:./test.sh
  6. 第一个参数为:
  7. 第二个参数为:
  8. 第三个参数为:

注意:在linux系统中输入以上命令时提示“/bin/sh^M:损坏的解释器: 没有那个文件或目录”

 这是由于脚本文件在保存时使用了DOS文件格式造成的,可以用vim打开文件,然后执行下列操作:

  1. :set ff=unix
  2. :wq
  3. 1.2处理参数的字符

注意:$*与$@的区别:

只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

三、shell运算符

1.算数运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用

如:val=`expr 2 + 2`或 $[2+2]

2.关系运算符

  

3.布尔运算符

  

4.逻辑运算符

  

5.字符串运算符

  

  1. a=
  2. b=
  3.  
  4. if [ $a != $b ]
  5. then
  6. echo "$a != $b : a 不等于 b"
  7. else
  8. echo "$a != $b: a 等于 b"
  9. fi

6.文件测试运算符

  

注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2;赋值=左右两端不能有空格

  条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

  乘号(*)前边必须加反斜杠(\)才能实现乘法运算;

四、命令

1.echo

1.1显示普通字符串

1.2显示转义字符串

  echo " \"hello\" "

1.3显示变量

1.4显示换行

  换行: echo -e "today is \n"

      echo “Friday”

  不换:  echo -e "today is \c"

      echo “Friday”

1.5显示重定向

  echo "it is a test">myfile

1.6原样输出

  单引号 echo 'my $name '

1.7显示命令执行结果

  echo `expr date`

2.printf

类似c中printf,详见https://www.runoob.com/linux/linux-shell-printf.html

3.test

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

详见https://www.runoob.com/linux/linux-shell-test.html

以下程序效果一样

五、循环

1. if else

  1. if condition1
  2. than
  3. command1
  4. elif condition2
  5. than
  6.  command2
  7. else
  8. than
  9.  command
  10. fi

2.for 循环

  1. for var in item1 item2 ... itemN
  2. do
  3. command1
  4. command2
  5. ...
  6. commandN
  7. done

3.while

  1. while condition
  2. do
  3. command
  4. done

4.unitil

  1. until condition
  2. do
  3. command
  4. done

5.case

  1. case in
  2. 模式1)
  3. command1
  4. command2
  5. commandN
  6. ;;
  7. *)
  8. command1
  9. command2
  10. commandN
  11. ;;
  12. esac

无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

6.跳出循环(break和continue)

六、shell函数

1.定义函数

  1. [ function ] funname [()]
  2. {
  3. action;
  4. [return int;]
  5. }
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
  1. funWithReturn(){
  2. a=
  3. b=
  4. echo "两个数字分别为 $a和 $b!"
  5. return $[a+b]
  6. }
  7. funWithReturn
  8. echo "输入的两个数字之和为 $? !"

注意:函数返回值在调用该函数后通过 $? 来获得。

2.函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

七、shell文件包含

  1. . filename # 注意点号(.)和文件名中间有一空格

  2. source filename
  1.  
  1. #!/bin/bash
  2. #使用 . 号来引用test1.sh 文件
  3. . ./test1.sh
  4. # 或者使用以下包含文件代码
  5. # source ./test1.sh
  6. echo "菜鸟教程官网地址:$url"
  1.  
  1.  

【shell】shell基础的更多相关文章

  1. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  2. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  3. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  4. Shell编程基础篇

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

  5. Shell的基础介绍和案例

    一.shell脚本基础 1.第一个脚本 vim  first.sh 分别使用三种方法可以执行脚本:   ./first.sh (需要有可执行的权限)   sh    first.sh   .  fir ...

  6. Shell编程基础篇-上

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

  7. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  8. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  9. shell 1基础

    shell简介 shell是一个用C语言编写的程序,是用户使用Linux的桥梁.shell既是一种命令语言,又是一种程序设计语言. shell脚本(shell script),是一种为shell编写的 ...

  10. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

随机推荐

  1. 123467123456#1#-----com.twoapp.DaDiShuGame01--前拼后广--现实打地鼠游戏jiemei

    com.twoapp.DaDiShuGame01--前拼后广--现实打地鼠游戏jiemei

  2. iOS通知注意点

    之前以为控制器发送通知,只有你满足:1>注册接收通知:2>进入本页面才能接收到值. 今天朋友问了一个问题: 他的逻辑如下: 退出登录发送通知,需要好几个界面会收到通知,然后这几个界面进行网 ...

  3. 生成count位随机数工具类

    工具类 import java.util.Random; /** * 生成6位随机数字 */ public class GeneratorCode { /** * * @Title: getCode ...

  4. Unity3D 原来Unity比较新的版本支持中文

    注意: Unity 2018.2 以上版本才可以

  5. 人工神经网络反向传播算法(BP算法)证明推导

    为了搞明白这个没少在网上搜,但是结果不尽人意,最后找到了一篇很好很详细的证明过程,摘抄整理为 latex 如下. (原文:https://blog.csdn.net/weixin_41718085/a ...

  6. 排序算法三:Shell插入排序

    排序算法三:Shell插入排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评> ...

  7. 高级UI-RecyclerView简单使用

    RecyclerView从Android 5.0开始引入,用以替代ListView.GridView控件,RecyclerView的存在,使得控件的耦合度更低,在ListView中需要使用ViewHo ...

  8. ORACLE创建表空间和用户,并分配权限

    注意:如果是创建新的库,首先要先创建表空间,之后才可以创建用户:1.//创建临时表空间 create tablespace NCPZS_DATA datafile '/home/soft/oracle ...

  9. easyui 解决连弹两个dialog时候,第二个dialog居中问题

    $('#showDivSecond').dialog('center'); (该方法自1.3.1版开始可用)

  10. 在eNSP下使用Hybird接口

    1.实验拓扑图 2.实验编址表 3.实验过程 按照拓扑图设置各个PC机的IP地址 双击PC1然后弹出对话框,依次设置主机名:PC1→IP地址:192.168.1.1→子网掩码:255.255.255. ...