shell参数
符号说明
echo $0
$1-$9 代表参数的位置,1代表第一个参数,,,,
$* 把全部参数当作一个字符串形式的参数,"$1 $2 … $n"的形式
$@ 把参数当作列表形式,与$*相同,"$1" "$2" … "$n" 的形式,注意引号的差别。
$# 参数的个数
$$ 运行的当前进程ID号
$? 显示上一个进程是否执行成功,成功执行返回0,执行不成功返回1
$! 后台运行的最后一个进程的ID号
$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。
假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
$* 与$@ 区别
for i in "$*"
do
echo $i
done
#结果#
1 2 3
for i in "$@"
do
echo $i
done
#结果#
1
2
3
变量赋值
[s14516@gdufs]$name="koo" #赋值之间别有空格
[s14516@gdufs]$echo name
name
[s14516@gdufs]$echo $name
koo
shell脚本
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
if语句
#!/bin/bash
read input
if [ $input = "gdufs" ]
then
echo "right"
else
echo "wrong"
fi
case语句
#!/bin/bash
hour=`date "+%H"`
case $hour in
[0-8]|19|2[0-3])
echo "good night"
;;
9|1[0-2])
echo "good morning"
;;
1[3-8])
echo "good afternoon"
;;
*) #表示其他情况
esac
循环
for name in zhangsan lisi wangwu
do
echo $name
done
expr 算数表达
1.四则运算
+ - \* / %
这小表达式两边需要有空格
[s14516@gdufs]$expr 4 \* 3
2.赋值表达式
[s14516@gdufs]$a=`expr 4 \* 3`
[s14516@gdufs]$echo $a
12
expr只支持整型运算
3.浮点型运算
[s14516@gdufs]$echo 4 \* 3.2 | bc
4.while循环
#!/bin/bash
read -p 'please input' n
i=1
while [ $i -le $n ]
do
echo $i
i=`expr $i + 1`
done
5.求和
#!/bin/bash
read -p 'please input: ' n
i=1
sum=0
while [ $i -le $n ]
do
sum=`expr $sum + $i`
i=`expr $i + 1`
done
echo $sum
shell函数
1.无参数函数
#!bin/bash
greet(){
echo 'hello'
}
greet
2.有参数函数
#!/bin/bash
greet(){
echo "hello, $1"
## $1 表示第一个参数,不需要在方法上写参数
}
read -p 'please input: ' name1 name2
greet $name1
greet $name2