shell 的 test命令
a=1
b=2
if test $[a] -eq $[b]
then
echo '两个数相等'
else
echo '两个数不相等'
fi
代码中的[]可以执行基本的算术运算
result=$[a=b]
echo '$result'
字符串测试
文件测试
if test -e ./file -o -e ./bash
then
echo '至少有一个文件存在'
else
echo '两个文件都不存在'
fi
SHELL的流程控制
shell的流程控制不可为空
if condition
then
command
fi
可以写成适用于终端命令提示符的一行:
if [$(psq -ef | grep -c "ssh" -gt 1)];then echo "true" ;fi
if condition
then
command1
elif condition2
then
command2
else
commandN
fi
For 循环
for var in item1 item2 ..itemN
do
command1
command2
...
commandN
done
for loop in 1 2 3 do echo "value is $loop" done
WHILE语句
while condition
do
command
done
int=1
while (($int<=5))
do
echo $int
let "int++"
done
无线循环
while:
while true
UNTIL 循环
until循环执行命令直至条件为true时停止
until循环与while循环处理方式恰好相反
until condition
do
command
done
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
CASE
shell的case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功则执行这个命令
case 值 in
模式1)
command1
command2
;;
模式2)
command1
command2
;;
esac
case取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行至;;
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式响应命令后不再继续其他模式。
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
跳出循环
while:
do
echo -n "输入1到5之间的数字"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为$aNum"
;;
*) echo "你输入的而数字不是1到5之间的"
break
;;
esac
done
CONTINUE
continue仅仅跳出当前循环
esac
case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break
SHELL函数
shell可以定义函数在shell脚本中调用.
[function] funname [()]
{action;
[return int;]}
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----"
函数参数
funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" #注意这个打印出来的是10 返回参数位置的只能返回个位数的 echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
SHELL输入/输出重定向
输出重定向
command1>file1
file1已经存在的内容将会被新内容所替代,如果将新内容添加在文件末尾,使用>>操作符。
输入重定向
command1<file1