shell介绍

Shell 是一个用c语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核服务。

shell脚本

Shell脚本(shell-script),是一种为shell编写的脚本程序。
shell编程跟javaScript、php编程一样,只要有一个能编写代码文本编辑器和一个能执行脚本的解释器就可以了。

shell脚本的执行

写一个shell脚本

#!/bin/bash
echo "Hello World !"

执行的两种方式

1.作为可执行程序进行执行
#先给执行脚本赋权
chmod +x ./demo1.sh
# 执行脚本
bash demo1.sh
2.作为解释器参数
/bin/sh demo1.sh
/bin/php test.php

shell 变量

定义变量是,变量名不加美元符号($,PHP语言中变量需要)
案例演示

name="张三"

注意

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

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可
案例演示

#!/bin/bash
name="张三"
echo ${name}
# 如果不加大括号,在碰到很多单词在一起的时候可能会混淆,导致不输出变量。
echo $name

只读变量

使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。(有点类似于常量)
案例演示

#!/bin/bash
studentage=12
readonly studentage
echo ${studentage}
studentage=15
echo ${studentage}

删除变量

使用unset命令删除变量

#!/bin/bash
name="张三"
echo ${name}
unset name
echo ${name}

此结果只会打印一次张三
变量被删除后不能再次使用。unset命令不能删除只读变量

变量类型

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

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

shell字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其他类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单引号的区别跟php类。

单引号

str='hello world'

单引号字符串的限制:

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

双引号

#!/bin/bash
name="张三"
str="hello ${name} !"
echo -e $str

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

拼接字符串

#!/bin/bash
name='张三'
#使用双引号拼接
str1="hello "$name" !"
str2="hello $name !"
str3="hello ${name} !"
echo $str1 $str2 $str3

#使用单引号拼接
str4='hello '$name' !'
str5='hello ${name} !'
echo $str4
echo $str5

获取字符串长度

#!/bin/bash
str="张三"
echo ${#str} #输出2

提取子字符串

从字符串中提取子字符串

#!/bin/bash
str="hello My name is zhangsan"
echo ${str:0:5}

查找子字符串

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

string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

注: 以上脚本中`是反引号,而不是单引号’,不要看错了。

数组

数组中可以存放多个值。Bash Shell只支持一位数组(不支持多为数组),初始化时不需要定义数字大小(与PHP类似)。
与大部分编程语言类似,数组元素的下标由0开始。
Shell数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

names=("name1" "name2" "name3" ....)

案例演示

#!/bin/bash
names=(A "name2" "name3")
echo ${names[0]}

获取数组中的数组元素

使用@或*可以获取数组中的所有元素
案例演示

#!/bin/bash
names=("name1" "name2" "name3" "name4" "name5")
echo "${names[*]}"
echo "${name[@]}"

获取数组的长度

#!/bin/bash
names=("name1" "name2" "name3" "name4" "name5")
echo "${#names[*]}"
echo "${#names[@]}"