Shell语言的echo命令
我们都知道echo是打印输出的意思,那么echo可以怎么实现输入呢
- 显示普通的字符串,例如:
echo "iPhoneX 标配8888"
- 显示转义字符,例如:
echo "iPhone 顶配 10000"
- 显示变量,例如:
iphone="iphoneX" echo "${iphone} 9888"
- 显示换行,必须要用
-e
来开启转义功能,例如:echo -e "iphoneX \n hello 未来"
- 不换行,不换行用
\c
表示,例如:echo -e iPhoneX hello未来 \c echo"科技"
- 显示一个执行命令,例如要求输入当前时间,用
date
- 退出命令,
exit 状态(详见下方的状态表)
,如果一旦执行了exit之后,后面的语句就不会继续执行了。 - 重定向
关于状态码:
状态码 | 描述 |
---|---|
0 | 命令执行成功 |
1 | 一般性未知错误 |
2 | 不适合的shell命令 |
126 | 命令不可执行 |
127 | 没有找到命令 |
130 | 通过ctrl+c终止的命令 |
255 | 正常范围内推出的状态码 |
Shell语言的数组
语法
数组名=(值1 值2 值3...)
初始化
方式一:
name=("404" "andy" "hello" "world")
方式二:
name=()
name[1]="404"
name[2]="Andy"
name[3]="hello"
name[4]="world"
读取数组
用@
或者*
来输出所有的数组元素,但是@
是将元素一个一个输出,*
是将数组内元素组合成一个字符串输出。这点需要注意。
echo ${name[*]}
echo ${name[@]}
数组长度
之前说了在输出前面加#
是输出字符串长度,这里同样适用于数组,在获取所有元素之后之后在数组前面加上#
,如果是*
的话,#
同样适用,可以很智能的识别空格来进行对元素长度的识别解析。
echo ${#name[@]}
echo ${#name[*]}
如果需要获取单个元素字符长度我们则可以用具体的下标
echo ${#name[3]}
Shell语言的传递参数
语法定义:(终端输入)
./文件名称.sh 参数一 参数二 参数三
获取参数:
之前字符串章节说过用${1},${2}...
表示,需要注意的是${0}
表示文件名称
echo ${1} ${2} ${3}
特殊字符
获取脚本输入参数个数
echo ${#}
获取参数列表
echo ${*}
Shell语言的基本运算符
基本运算符
基本运算符就是我们所称的+ - * / %
a=1234
b=3214
c=`expr $a + $b`
可以注意到,在shell语言中,单纯的元素相加不能直接用+,而是必须要用expr去计算两个变量的值。而且如果调用,后面的变量名称和+之间必须要加上空格来保证变量的独立性。否则则会当成字符串输出。
注意:当且仅当用乘法的时候必须加上一个转义字符\
,
a=1234
b=3214
c=`expr $a \* $b`
赋值运算符
=
这个符号就很简单了,就不在做阐述了
关系运算符
一张表格阐述
Xnip2020-03-09_10-27-14
布尔运算符
一张表格阐述
Xnip2020-03-09_10-12-21
逻辑运算符
一张表格阐述
Xnip2020-03-09_10-58-05
字符串运算
一张表格阐述
Xnip2020-03-09_15-07-43
文件测试运算符
一张表格阐述
Xnip2020-03-09_15-08-30
循环控制语句
if-else
语法结构
if [条件]
then
代码
else if [条件]
then
代码
else
代码
fi
记住判断最后要以fi
结尾
例如我们来判定一个学生是不是男生:
sex="man"
if [ $sex = "man" ]
then
echo "男生"
else
echo "女生"
fi
for
语法结构
for 变量名 in item1 item2 item3 …
do
代码
done
比如我们要循环打印一个数组中的元素:
names=("张三" "李四" "王五")
for i in ${names[@]}
do
echo ${I}
done
while
语法结构
while(条件)
do
代码
done
假设我们要一直循环直到while条件不成立
a=1
while(($a<10))
do
echo ${a}
a=`expr $a + 1`
done
case
语法结构
case 值 in
模式1)
代码
;;
模式2)
代码
;;
模式3)
代码
;;
sac
判断number的值
number=1
case $number in
1) echo "等于1"
;;
2) echo "等于2"
;;
3) echo "等于3"
;;
esac
until
until跟while循环相反,当条件判断为false的时候才进入循环执行,记住此时判断循环条件要打两个括号
I=1
until (($i > 1))
do
echo "i小于等于1"
done
跳出循环
1) 跳出单个循环用break
for ((i = 0;i < 10; i++))
do
echo "当前i的值为:${I}"
if [ $i -eq 5 ]
then
echo "退出循环"
break
fi
done
- 直接跳出多层循环用
break 层数
,默认为1,例如退出2层
for ((i = 0; i < 10; i++))
do
echo "打印所有i:${I}"
for((j=0;j<10;j++))
do
echo "打印所有j:${j}"
if [ ${j} -eq 2 ]
then
echo "退出所有循环"
break 2
fi
done
done
- 结束当前循环
continue
for ((i = 0; i < 3; i++))
do
echo "打印所有i:${I}"
for((j=0;j<3;j++))
do
if [ ${j} -eq 2 ]
then
continue
else
echo "打印当前j:${j}"
fi
done
done
打印
打印所有i:0
打印当前j:0
打印当前j:1
打印所有i:1
打印当前j:0
打印当前j:1
打印所有i:2
打印当前j:0
打印当前j:1
相当于跳过了j=2的所有打印
网友评论