目录
一、shell编程概述
1.shell名词解释
-
shell
命令解释器
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
-
shell两大主流
sh:
Bourne shell (sh) ,Solaris,hpux默认shell
Bourne again shell (bash) ,Linux默认shell
csh:
C shell (csh)
tc shell (tcsh)
- #! 声明
告诉系统其后路径所指定的程序即是解释此脚本文件的shell程序
#!/bin/bash
echo "helloworld!"
2.执行shell脚本
- 输入脚本的绝对路径或相对路径
/root/helloworld.sh
./helloworld.sh
执行的必须是一个可执行文件
- bash或sh+脚本
sh helloworld.sh
当脚本没有x权限时,root和文件所有者通过该方式可正常执行
- 在脚本的路径前再加“.”或source
source helloworld.sh
- 区别
第一种和第二种会新开一个bash,不同bash中的变量无法共享
第三种 是在同一个shell里面执行的
- export
可以将当前进程的变量传递给子进程去使用
二、shell基础
1.shell变量
- 定义变量
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线。
不能使用标点符号,不能使用bash里的关键字(利用help命令可查看保留关键字)
- 变量的类型
- 局部变量
- 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量
- 所以的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。
- shell变量
- shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量, 有一部分是局部变量。
- 局部变量
#变量的声明
name="nice"
#变量的调用
echo $name
echo ${name}
#只读变量
name="nice"
readonly name
name="good"
#删除变量
unset name
2.shell字符串
- 字符串可以用单引号,也可用双引号,也可都不用。
- 单引号
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字符串中不能出现单独一个单引号,但可成对出现,作为字符串拼接使用
- 双引号
- 双引号里面可以有变量,空格
- 可以出现转义字符
#声明字符串
str1="hellowolrd1"
str2='helloworld2'
#字符串拼接--双引号
name='helloworld'
name1="hello,"$name"!"
name2="hello,${name}!"
#字符串拼接--单引号
name='helloworld'
name1='hello,'$name'!'
name2='hello,${name}!'
#字符串的长度
num="123456"
echo ${#num}
echo ${num:1:4}
3.shell数组
- bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
- 数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0
- Shell 是弱类型的,它并不要求所有数组元素的类型必须相同
- Shell 数组的长度不是固定的,定义之后还可以增加元素。
#定义数组 括号来表示数组,数组元素用空格符合分割
#数组名=(值1 值2 ... 值n)
fs=("兔" "虎" "猫" "羊")
#读取数组 ${数组名[下标]}
f=${fs[1]}
#使用@符号可以获取数组中所有元素
echo ${fs[@]}
#获取数组长度
len1=${#fs[@]}
len2=${#fs[*]}
- 无需逐个元素地给数组赋值
ages=([3]=24 [5]=19 [10]=12)
以上代码就只给第 3、5、10 个元素赋值,所以数组长度是 3。