shell 学习(二)
Shell脚本语言 -echo命令
#1、显示普通字符串
echo "1-iPhoneX 标配 8388"
#2、显示转义字符
echo "2- " iPhoneX 顶配 9688 " "
#3、显示变量
iphone="iPhoneX"
echo "3-${iphone} 9688"
#4、显示换行
#错误写法
echo "4-iPhoneX \n hello未来"
#正确写法(-e:表示开启转义功能)
echo -e "5-iPhoneX \n hello未来"
#5、不换行
#注意:"-e"开启转义功能,"\c"表示不换行
echo -e "6-iPhoneX hello未来 \c "
echo "7-科技"
#6、显示一个执行命令
要求:输出当前时间
echo `data`
#7、退出命令
语法:exit状态->退出程序
写法一
iPhone="404报错,买了一台"
echo ${iphone}
exit
echo "你完了"
写法二
iPhone="404报错,买了一台"
echo ${iPhone}
exit 1
Shell脚本语言-数组?
1、语法
数组名=(值1 值2 值3。。。)
2、初始化数组
方式1
name=("404" "lsg" "ABC" "全部最差")
echo $name
默认打印第一个
方式2
name=()
name[0]="1"
name[]1="2"
echo ${name[0]} ${name[1]}
默认打印第一个
3、读取数组
语法结构:${数组名[下标]}
name=("404" "lsg" "ABC" "全部最差")
输出一个元素
echo ${name[0]}
输出所有->"@" "*"表示输出所有元素 【区别一个分开输出 一个以字符串输出】
echo ${name[@]}
3、数组长度
方式1:获取数组元素的个数
语法1:${(#数组名[@])}
代码
name=("404" "lsg" "ABC" "全部最差")
echo ${#name[@]}
方式2:获取数组元素的个数
语法1:${(#数组名[*])}
代码
name=("404" "lsg" "ABC" "全部最差")
echo ${#name[*]}
方式3:获取数组里单个元素字符串的长度
语法1:${(#数组名[下标])}
代码
name=("404" "lg" "ABC" "全部最差")
echo ${#name[2]}
结果:3
Shell脚本语言-传递参数?
1、语法定义?
./文件名称.sh 参数1 参数2 参数3...
2、案例
脚本内容
${0} - >文件名称
${1} - >参数1
${2} - >参数2
echo ${0} ${1} ${2}
执行脚本
./文件名称.sh "豆你玩" "额导报"
3、特殊字符
1:$#:获取脚本输入参数个数
脚本内容如下:
echo ${#}
执行脚本代码:
./文件名称.sh "豆你玩" "额导报"
执行脚本结果:2
2:$* 和 $# :整个脚本输入参数列表
脚本内容如下:
echo ${*}
执行脚本代码:
./文件名称.sh "豆你玩" "额导报"
执行脚本结果:"豆你玩" "额导报"
Shell脚本语言-基本运算符?
关系运算符
1、算术运算符?
"+" 运算
#注意"expr"规定命令执行加操作
a=8
b=9
c=`expr $a + $b`注意变量加必须有空格 否则 执行结果:8+9
执行结果:echo $c
"-" 运算
#注意"expr"规定命令执行减操作
a=8
b=9
c=`expr $a - $b`注意变量运算必须有空格 否则 执行结果:8-9
执行结果:echo $c
"*" 运算
#注意"expr"规定命令执行乘操作
#注意乘法运算记得做一个转义字符 \*
a=8
b=9
c=`expr $a \* $b`注意变量运算必须有空格 否则 执行结果:8*9
执行结果:echo $c
"÷ /" 运算
#注意"expr"规定命令执行除操作
a=8
b=9
c=`expr $a / $b`注意变量运算必须有空格 否则 执行结果:8/9
执行结果:echo $c
"%" 运算
#注意"expr"规定命令执行取余操作
a=8
b=9
c=`expr $a % $b`注意变量运算必须有空格 否则 执行结果:8%9
执行结果:echo $c
"=" 运算
a=8
b=$a
执行结果:echo $b
"==" 运算
a=8
b=9
if [ $a == $b ]
then
echo "a 等于 b"
else
echo "a 不等于 b"
fi
2、布尔运算符?
"!" 非运算,表达式为true,返回true,否则返回false
a=8
b=9
if [$a != $b]
then
echo"a不等于b"
fi
执行结果:echo $b
"-o" 或运算,表达式为true,返回true,否则返回false
a=8
b=9
if [$a -lt 10 -o $b -gt 8]
then
echo"a不等于b"
fi
"-a" 与运算,两个表达式都为true,返回true,否则返回false
a=8
b=9
if [$a -lt 10 -a $b -gt 8]
then
echo"成立"
else
echo"不成立"
fi
3、逻辑运算符?
"&&" 逻辑且->and
a=100
b=200
if [ $a -lt 200 ] && [ $b -gt 200 ]
then
echo"成立"
else
echo"不成立"
fi
"||" 逻辑或
a=100
b=200
if [ $a -lt 200 ] || [ $b -gt 200 ]
then
echo"成立"
else
echo"不成立"
fi
4、字符串运算?
"="检测两个字符串是否相等,如果相等返回true
a="lsg"
b="你好"
if [ $a = $b ]
then
echo "成立"
else
echo "不成立"
fi
"!="检测两个字符串是否相等,如果不相返回true
a="lsg"
b="你好"
if [ $a != $b ]
then
echo "成立"
else
echo "不成立"
fi
"-z"检测字符串长度是否为0,如果是返回true
a="lsg"
if [ -z $a ]
then
echo "a空"
else
echo "a不为空"
fi
"-n"检测字符串长度是否为0,如果不是0返回true
a="lsg"
if [ -n "$a" ] 注意这里需要加双引号 要不语法错误 导致不执行else
then
echo "a不为空"
else
echo "a为空"
fi
直接检测字符串是否为空,如果不是空返回true
a="lsg"
if [ $a ]
then
echo "a不为空"
else
echo "a为空"
fi
5、文件测试运算符?
"-d file":检测文件是不是一个目录,如果是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ -d $file ]
then
echo "是一个目录"
else
echo "不是一个目录"
fi
"-r file":检测文件是否可读,如果是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ -r $file ]
then
echo "是可读"
else
echo "不可读"
fi
"-w file":检测文件是否可写,如果是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ -w $file ]
then
echo "是可写"
else
echo "不可写"
fi
"-x file":检测文件是否可执行文件,如果是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ -x $file ]
then
echo "是执行文件"
else
echo "不执行文件"
fi
"-f file":检测文件是否是一个普通文件(既不是目录,也不是设备文件),如果是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ -f $file ]
then
echo "普通文件"
else
echo "特殊文件"
fi
"-s file":检测文件是有内容,如果有是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ - $file ]
then
echo "文件有内容"
else
echo "文件没有内容"
fi
"-e file":检测文件是否存在(包含了:目录文件),如果是,那么返回true
file="/Users/lisiguang/Desktop/test.sh"
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
Shell脚本语言-流程控制?
"if"语句
语法结构
if [条件]
then
代码
fi 表示结束
代码结构
file="/Users/lisiguang/Desktop/test.sh"
if [ - $file ]
then
echo "文件有内容"
fi
"if else"语句
语法结构
if [条件]
then
代码
else
代码
fi 表示结束
代码结构
file="/Users/lisiguang/Desktop/test.sh"
if [ - $file ]
then
echo "文件有内容"
else
echo "文件没有内容"
fi
"if elif else"语句
语法结构
if [条件]
then
代码
elif [条件]
then
代码
else
代码
fi 表示结束
代码结构
a=11
if [ $a == 12 ]
then
echo "12"
elif [ $a == 11 ]
then
echo "11"
else
echo "2"
fi
"for"循环语句
语法结构
for 变量名 in item1 item2 item3 ...
do
代码
done
代码案例1:读取简单的值
for i in "lsg" "nihao" "meimei" "woaim"
do
echo $i
done
代码案例2:读取列表复杂的值 特殊字符 得转义 \` "I don't konw"便利是一个字符串 如果不加双引号 I don\'t konw 就是一个一个输出
for i in "I don't konw"
do
echo ${i}
done
代码案例3:读取变量读取列表
val="I don't konw"
for i in val
do
echo ${i}
done
代码案例4:读取目录->(*)通配符
val="/Users/lisiguang/Desktop/*"
for i in ${val}
do
echo ${i}
done
代码案例5:支持c语言写法
for ((a = 1; a<5; a++))
do
echo ${a}
done
代码案例6:嵌套循环
for ((a = 1; a<5; a++))
do
echo ${a}
done
"while"循环语句
语法结构
while (())
do
代码
done
代码案例1:
a=1
while (($a<10))
do
echo $a
a=`expr $a + 1`
done
代码案例2:
无限循环1
while :
do
echo hello""
done
无限循环2
while true
do
echo "helloo"
done
无限循环3
for ((;;))
do
echo "helloo"
done
6"case"语句
语法结构
case 值 in
模式1)
代码
;;
模式2)
代码
;;
模式3)
代码
;;
esac
代码案例1:
number=1
case $namber in
1)
echo "等于1";;
2)
echo "等于2";;
3)
echo "等于3";;
esac
7"until":循环
语法结构
until条件
do
逻辑代码
done
脚本代码
注意:这个循环 false 进入循环体 一般true进入循环体
i=1
until (($i > 1))
do
echo "i小于等于1"
done
8"break":跳出循环
1跳出单个循环
案例:
for((i=0;i<10;i++))
do
echo "当前i的值:${i}"
if [ ${i} -eq 5 ]
then
echo "退出循环"
break
fi
done
2跳出内部循环
案例:
for((i=0;i<5;i++))
do
echo "外层循环 ${i}"
for((j=0;j<5;j++))
do
echo "内层循环 ${j}"
if [ ${j} -eq 2 ]
then
echo "退出内层循环,执行下一个操作"
break
fi
done
done
3跳出外部循环
注意:break 1 默认1层 默认退出1层循环;如果break 2 就是退出2层循环;如果break 3 就是退出3层循环 (如果层数大于当前循环自动识别最大循环 不会报错 ;如果小于等于0会报错)
案例:
for((i=0;i<5;i++))
do
echo "外层循环 ${i}"
for((j=0;j<5;j++))
do
echo "内层循环 ${j}"
if [ ${j} -eq 2 ]
then
echo "退出内层循环"
break 1
fi
done
done
9"continue":跳出循环
案例:
for((i=0;i<5;i++))
do
echo "外层循环 ${i}"
if [ ${i} -eq 2 ]
then
echo "下一个操作"
continue
else
echo "else外层循环 ${i}"
fi
done
关系运算符