Shell 编程
在bash中变量是没有类型之分的。
1、定义变量
aa=abc123 定义变量并赋值abc123
aa= 定义空变量或者清空变量aa,但变量还存在----如果只是aa 没有等于号,那么执行的时候会报错,定义空变量必须是aa=
2、变量的分类:局部变量和环境变量
局部变量:的作用域被限定在创建它们的shell中
环境变量:通常又称全局变量,以区别于局部变量,通常,环境变量应该大写,环境变量是已经用export内置命令导出的变量
3、局部变量:
格式:
变量名=值
declare 变量名=值 declare 是内置命令:声明
4、环境变量
格式:
export 变量=值
declare -x 变量=值
环境变量按生存周期可分为:
1. 永久的:需要修改配置文件,export变量永久生效。
2. 临时的:使用export命令行声明即可,变量在关闭shell时失效。
脚本的编写:
#!/bin/bash #这句话是:约定标记,用于指定使用什么解释器。
.
.
.
编写完脚本之后不能运行,需要先执行 chomd + ./脚本名.sh
执行完之后才可以执行。
5、对变量的基本操作: 定义一个变量name :name=zhangsan
${name} $name 两种方式引用name变量。
${#name} 是算出name的长度
${name:1:4} 用于变量的截取——hang 从第二位开始长度为4
字符的操作:
#、## 表示从左边开始删除。一个 # 表示从左边删除到第一个指定的字符;两个 # 表示从左边删除到最后一个指定的字符。
%、%% 表示从右边开始删除。一个 % 表示从右边删除到第一个指定的字符;两个 % 表示从左边删除到最后一个指定的字符
样例:${name#*a} ---删除掉从左边开始到第一个a的字符---:ngsan
${name##*a} ----从左边开始到最后一个字符:n
*代表要删除的内容,如果是#那么*就在左侧,如果是%那么就在右侧。
6、shell 数组:
1、定义数组:用括号来表示数组,数组元素用"空格"符号分割开;
如:name=(a b c d s)
2、引用子元素:
${name[0]} -a
3、所有元素
${name[@]}或者${name[*]} a b c d s
4、数组长度
${#name[@]} ---5
5、遍历:
for循环遍历:a=(1 2 "3" "4" 6 7)
for i in ${a[@]}
do
${i}
done
while循环遍历:
定义一个变量: j=0
while [${j} lt ${#a[@]}]
do
echo ${a[${j}]}
let j++ --这一步可以有多种写法:let "j++" /let j+=1 /j=$[${j}+1]
done
7、参数传递:
1、向脚本执行文件传递参数:
./test.sh a b 1
分别向test.sh执行文件传递了三个参数,a b 1。0位代表文件名
2、输出参数的个数:
$# ----4
$1 ----a
$2 ----b
3、输出所有的参数:
$@ -----"a" "b" "c"
8、运算符:
1、基本运算符:
expr :是一款表达式计算工具,使用它能完成表达式的求值操作
value=`expr 2 + 2`
echo ${value} ----4 注意:2和+必须有空格 `不是单引号而是反引号。
乘法相对来说有点特殊: `expr ${a} \* ${b}` ----->a*b
条件表达式要放在方括号之间,并且要有空格,例如:必须写成 [ $a == $b ]。判断a是否等于b
2、关系运算
[ $a -eq $b ] ==
[ $a -ne $b ] !=
[ $a -lt $b ] <
[ $a -gt $b ] >
[ $a -ge $b ] >=
[ $a -le $b ] <=
3、布尔运算
! [ !false ] 非运算 -->true
-o 或运算
-a 与运算
4、逻辑运算
[[ $a && $b ]] 与
[[ $a || $b ]] 或
5、字符串的一些基本操作
[ $a = $b ] =
[ $a != $b ] !=
[ -z $a ] 判断a长度是否零 为0 返回true
[ -n $a ] 长度不为0返回true
[ $a ] 判断a是否为空,不为空返回为true
6、文件测试运算符。
。。。。。。
9、read命令
#!/bin/sh
read name //read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给这个shell 变量name
echo "$name It is a test"
10、流程控制: