Shell变量
Shell中的变量比较简单,不需要声明。并且只有一种类型:String。可以直接赋值,需要注意的是赋值语句中不能有空格。引用时,仅仅需要加上一个“$”即可。当然为了避免混淆,常常使用双引号包含要引用的变量,如下所示
#!/bin/bash
A=b
All=all
echo "$A"ll
echo "$All"
$ bll
all
条件判断
条件判断主要是用来判断两个字符串是否相等或者数字的大小。简单给一个例子
#!/bin/bash
a="$1"
if [ "$a" = "hello" ]
then
echo "equal"
elif [ -z "$a" ]
then
echo "是空的"
fi
比价简单,需要注意几点:
- if和fi是成对出现的
- "["后面有一个空格,这个不可少,其实很好理解"[ ]"中间运行的是一个脚本
- 多种情况可以用elif
- if和elif之后都要跟着then
- “=”是否字符串比较运算,如果比较两个数字的大小,用 -eq
shell中的运算符
操作符 | 返回true的条件 | 操作数个数 |
---|---|---|
-n | 操作数的长度不为零 | 1 |
-z | 操作数的长度为零 | 1 |
-d | 操作数对应一个目录 | 1 |
-f | 操作数对应一个文件 | 1 |
-eq | 操作数为整数,并且相等 | 2 |
-neq | 操作数为整数,并且不相等 | 2 |
= | 操作数为字符串,并且相等 | 2 |
!= | 操作数为字符创,并且不相等 | 2 |
-lt | less than 操作数为整数 | 2 |
-gt | great than 操作数为整数 | 2 |
-ge | great equal 操作数为整数 | 2 |
-le | less equal 操作数为整数 | 2 |
额,当搬运工真的很辛苦
循环
while[]...do...done语句
类似于C语言中的do...while语句,举例如下:
#!/bin/bash
echo "please use add or delete or exit"
ACTION="default"
while [ -n $ACTION ]
do
read ACTION
case $ACTION in
add)
echo "add somebody"
;;
delete)
echo "delete somebody"
;;
exit)
echo "complete"
break;
;;
*)
echo "invalide action, please re-enter"
;;
esac
done
for循环
for ... in ... do ... done
这点和python及java类似
#!/bin/bash
for x in 1 2 3 4 5 hello
do
echo $x
done
作用就是循环输出1 2 3 4 5 hello
for x in `ls`
do
echo $x
done
作用就是输出当前路径下的所有文件名称
知识点是,使用``在脚本中执行语句
函数
还是直接给出例子吧
strcat()
{
OUT="$1"" ""$2"
return 0
}
strcat2()
{
echo "$1"" ""$2"
return 3
}
A="cat"
B="mouse"
OUT=""
strcat $A $B
echo OUT
OUT2=`strcat2 $A $B`
echo $?
echo $OUT2
知识点:
- 函数定义不需要写明入参,使用时,直接使用$加序号获取
- 变量的作用域是全局的
- $?用于获取上次执行的脚本返回的值
- OUT2=`strcat2 $A $B`不是直接将返回值赋值给OUT2,而是将strcat2的echo值赋值给OUT2。这说明,如果我们要返回值给调用者有两种方式,一种是全局变量赋值,另一种是在函数中echo出来。
上述脚本执行完毕之后,输出的结果应该是这样的
cat mouse
3
cat mouse