shell传递参数,
执行shell脚本的时候,向脚本中传递参数,脚本内获取参数的格式为 $n n是一个数字,代表的是
第几个参数,n是从1开始,0指的是文件的文件名,
echo "执行的文件名:$0";
echo "第一个参数为:$1";
$#传递到脚本的参数个数, $*显示全部的传入参数。
三个参数1 2 3 则“*”表示"123" ”@”表示“1” ”2“ ”3”
数组: 可以存放多个值的数据类型 shell不支持多维数组
定义数组
array_name=(1 2 3 4)
array_name[0]=value1
读取数组
${array_name[index]}
读取数组中的所有元素
${array_name[*]} ${array_name[@]}
获取数组的长度
${#array_name[*]} ${#array_name[@]}
shell基本运算符:
算术运算符:+ - × / % = == != *号前面使用expr必须加\ *
原生的bash不支持算术运算,一般通过命令awk expr 来实现
expr 2 + 2 :表达式与运算符之间要有空格2+2不对,
完成的表达式要被``包括,0
关系运算符:
-eq 检测两个数是否相等
-ne 检测两个数是否不相等
-gt 检测左边数是否大于右边数
-lt 检测左边是否小鱼右边
-ge 检测左边是否大于等于右边
-le 检测左边是否小于等于右边
eg: [$a -eq $b ] 参数要用变量内容
布尔运算符: !非运算 -o 或运算 -a与运算
[! false ] [
a−lt20−o
b -gt 100] [$a -lt 20 -a ]
逻辑运算符: && 与 ||或
字符串运算符: = !=
-z 检测字符串长度是否为0 是则返回true
-n 检测字符串长度是否为0 不是则返回true
str 检测字符串是否为空,不为空返回true
文件测试运算符
-b 检测文件是否是块设备文件
-c 检测文件是否是字符设备文件
-d 检测文件是否是目录
、、、、、、
echo 命令
显示普通字符串 : echo “tiansongtao”
显示转移字符串 : echo “\”if is a tian\”“
显示变量 : echo ” $name “
显示换行 : echo -e ” OK! \n” -e 开启转义
显示不换行 : echo -e ” OK \c”
显示结果定向至文件 echo “tiansongtao “>>myfile
原样输出字符串,不转义取变量 echo $tian\"
—–$tian\”
显示命令执行结果: echo date
—-显示当前时间
printf 模仿C的输出 可以控制多种输出
eg printf format-string [arguments、、、]
format-string 为格式控制字符串
arguments 为参数列表
print "%-10s %-8s %-4s\n" 姓名 性别 体重kg
print "%-10s %-8s %-4.2f\n" 郭靖 男 66.2
结果为: 姓名 性别 体重kg
郭靖 男 66.2
%s %c % d %f 都是格式替代符 %-10s:指一个宽度为10的字符,(-表示
左对其,没有是右对其,) %-4.2f 表示格式为小数,.2表示两位小数
printf转义字符:
\a 警告 \b后退 \c抑制不显示输出结果中的换行字符
\n 换行 \f换页 \v垂直制表,
test命令: 检查某个条件是否成立,他可以进行数值、字符、文件三方面的测试
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真 -ge 大于等于则为真
-lt 小于则为真 -le 小鱼等于则为真
eg: num1=100 num2 = 100
if test $[num1] -eq $[num2]
then
echo "两数相等"
shell流程控制
在shell中,如果else没有要执行的语句就不要这个else
if else
if condition
then
command1
command2
else
command
fi
末尾要用fi就是if 倒过来的拼写
if-else -if -else
if condition1
then
command1
elif condition2
then
command
else
commandN
fi
for循环
for var in item1 item2、、、
do
command1
done
eg: for loop in 1 2 3 4 5
do
echo "the value is $loop"
done
while语句
while condition
do
command1
done
eg: int-1
while((
int<=5))doecho
int
done
case 语句为多选择语句,
工作方式,取值后必有单词in,每一个模式以)括号结束,一个模式一致执行到;;
case 值 in
模式1)
command1
;; 两个;;号就相当于break
模式2)
command2
;;
esac 这个为全部结束标志
eg: echo `你输入的数字为:`
read aNum
case $aNum in
1) echo `你选择了1`
;;
2) echo `你选择了2`
;;
esac
跳出循环 break
允许跳出所有循环,(终止执行后面的所有循环)
continue 跳出本次循环,接着执行别的循环