Shell编程中的数组变量
- 练习:arr.bash
#! /bin/bash
#定义数组变量 users就是数组变量名
#()里是放在数组变量中的值,用空格隔开
users=("zs" "ls" "ww")
#下标 0 1 2
#根据下标从数组变量中取出值 语法:数组变量名[下标]
echo ${users[0]} #zs
echo ${users[1]} #ls
echo ${users[2]} #ww
#将数组变量中的所有值输出
echo ${users[*]} #zs ls ww
#获取数组变量的大小(数组变量中的值的个数) 语法:#数组变量名[*]
echo ${#users[*]} #3
#输出下标0对应的值的长度
echo ${#users[0]} #2
#修改数组变量中的值 将"ls"修改为"xiaohong"
users[1]="xiaohong"
echo ${users[*]} #zs xiaohong ww
echo ${#users[1]} #8
echo ${users[1]} #xiaohong
#复制users数组变量的全部内容到一个新数组变量us中
#定义us数组变量 us=("")
#users数组变量的全部内容 ${users[*]}
#完成复制,将${users[*]}放入""里就可以了
us=("${users[*]}")
#将us数组变量中的全部内容输出
echo ${us[*]}
Shell编程中的特殊变量
- 特殊变量由bash自动定义和赋值,用户不能修改。
$? 前一个命令的执行状态。0表示程序执行成功;1表示程序执行失败
$# 命令行参数的个数,不包括命令行本身
$0 代表命令本身
$1-$n 代表具体的命令行参数,当n大于9时,需要用{}括起来
$* 全部的命令行参数
练习:spec.bash
#! /bin/bash
#Shell程序中的特殊变量
#执行一个删除命令
rm /home/wufc/a/a.txt
echo $? #前一个命令的执行状态 0表示成功 1表示失败
#特殊变量:$#表示命令行中的参数个数,不包括命令本身的
echo $# #在命令输入./spec.bash a b c,输出的结果为3
#特殊变量:$0表示命令本身
echo $0 #在命令行输入./spec.bash a b c,输出的结果为./spec.bash
#特殊变量:$1~$n表示具体的参数 9以后的数字需要放在{}里
echo $1 #a
echo $2 #b
echo $3 #c
echo $4 #空白,因为就3个参数
echo $9 #空白
echo ${10} #空白
#用命令行输入的3个参数创建一个数组变量
strs=($1 $2 $3)
echo ${strs[*]} #将数组变量strs中所有的内容输出
#特殊变量:$*表示所有的命令行参数
echo $*
Shell程序中的3个结构体
- 顺序结构
- 分支结构
- 循环结构
顺序结构
- 从上往下依次执行
- 练习:shunxu.bash
cd
mkdir www
cd www
touch w.txt
ls
pwd
分支结构
- java语法中的分支结构
if(a>90){
语句
}else if(条件表达式){
语句
}else if(条件表达式){
语句
}else{
语句
}
- Shell程序中的分支结构
if 条件表达式 then
语句
elif 条件表达式 then
语句
elif 条件表达式 then
语句
else
语句
fi
- 判断真假的条件表达式的语法:
test 表达式 或者 [ 表达式 ]
强调:表达式的左右两边要加空格
- 表达式:
- 与,或,非的判断:
! 表达式 对表达式的值取反
条件1 -a 条件2 与/并且
条件1 -o 条件2 或/或者
- 字符串是否为空的判断:
-z string
-n string
- 判断字符串是否相等:
string1 = string2
string1 != string2
- 判断整数之间的关系:
整数1 -eq 整数2 等不等
整数1 -ge 整数2 大于等于
整数1 -gt 整数2 大于
整数1 -le 整数2 小于等于
整数1 -lt 整数2 小于
整数1 -ne 整数2 不相等
- 其他:
-d file 判断file是否为目录
-e file 判断file是否为文件
- 练习:biaodashi.bash
#! /bin/bash
#演示Shell中的表达式语法
#使用test判断表达式3 -ge 2的真假
test 3 -gt 2
echo $? #输出结果为0,表示test 3 -gt 2的判断结果为真
#另外一种写法
[ 3 -gt 2 ]
echo $? #输出结果为0,表示[ 3 -gt 2 ]的判断结果为真
# ! 表达式:取反
test ! 3 -gt 2 #对表达式3 -gt 2进行取反,输出结果为1,表示test判断 ! 3 -gt 2的结果为假
echo $?
#使用另外一种写法
[ ! 3 -gt 2 ]
echo $? #输出结果为1
#定义两个变量i和j,都赋值为5
i=5
j=5
#判断表达式i小于等于j的结果
test ${i} -le ${j}
echo $? #输出结果为0,表示上面的test判断的表达式的结果为真
#使用 -a 或者 -o
test 1 -gt 2 -a 3 -le 1
echo $? #输出结果为1,表明上面test判断的表达式的结果为假的
#比较一下字符串
test "abc" = "abc" #判断字符串"abc"等于字符串"abc"吗,判断结果为真
echo $? #输出结果为0
test "abc" != "abc" #判断字符从"abc"不等于字符串"abc"吗,判断结果为假
echo $? #输出结果为1
test -d /home/wufc/a
echo $? #输出0,说明a是目录
test -d /home/wufc/a.txt
echo $? #输出1,说明a.txt不是目录