1. 输入一行字符并赋值给一个变量:
linux15:~/opt # read -p "" a
123
linux:~/opt # echo $a
123
linux:~/opt # read -p "" abc
afsd2321qewr
linux:~/opt # echo $abc
afsd2321qewr
linux:~/opt #
2 函数用法:
[~/shell/function]# cat factorial.sh
#!/bin/bash
function factorial
{
factorial=1
for (( i=1;i <= $1;i++ ))
do
factorial=$[ $factorial * $i ]
done
echo $1的阶乘是:$factorial
}
echo '程序名':$0,用于求阶乘
factorial $1
[~/shell/function]# ./factorial.sh 10
程序名:./factorial.sh,用于求阶乘
10的阶乘是:3628800
执行shell命令时, $0 存储 shell命令 的第一个参数(命令名), $1 存储shell命令的第二个参数。
3. 函数返回码是指函数最后一条命令的状态码,可以用于函数返回值。
linux-xingyuncao15:~/opt # more return.sh
#!/bin/bash
function fun1 {
read -p "enter a: " a
echo -n "print 2a: "
return $[ $a * 2 ]
}
fun1
echo "return value $?"
linux-xingyuncao15:~/opt # ./return.sh
enter a: 24
print 2a: return value 48
linux-xingyuncao15:~/opt # ./return.sh
enter a: 200
print 2a: return value 144
linux-xingyuncao15:~/opt # ./return.sh
enter a: asdfad
print 2a: return value 0
linux-xingyuncao15:~/opt #
由于shell状态码最大是255,所以当返回值大于255时会出错。
4. 为了返回大于255的整数,可以用函数输出到变量:
linux-xingyuncao15:~/opt # more return2.sh
#!/bin/bash
function fun2 {
read -p "enter a: " a
echo -n "print 2a: "
echo $[ $a * 2 ]
}
result=`fun2`
echo "return value $result"
linux-xingyuncao15:~/opt #
linux-xingyuncao15:~/opt #
linux-xingyuncao15:~/opt # ./return2.sh
enter a: 502398348737461
return value print 2a: 1004796697474922
linux-xingyuncao15:~/opt # ./return2.sh
enter a: 12asdf
./return2.sh: line 5: 12asdf: value too great for base (error token is "12asdf")
return value print 2a:
linux-xingyuncao15:~/opt # ./return2.sh
enter a: 2a
./return2.sh: line 5: 2a: value too great for base (error token is "2a")
return value print 2a:
linux-xingyuncao15:~/opt # ./return2.sh
enter a: adsf12
return value print 2a: 0
linux-xingyuncao15:~/opt # ./return2.sh
enter a: 2.5
./return2.sh: line 5: 2.5 * 2 : syntax error: invalid arithmetic operator (error token is ".5 * 2 ")
return value print 2a:
linux-xingyuncao15:~/opt #
linux-xingyuncao15:~/opt # more return2.sh
#!/bin/bash
function fun2 {
read -p "enter a: " a
echo -n "print 2a: "
echo $[ $a * 2 ]
}
result=`fun2`
echo "return value $result"
linux-xingyuncao15:~/opt #
linux-xingyuncao15:~/opt # sh -x return2.sh
++ fun2
++ read -p 'enter a: ' a
enter a: 2345
++ echo -n 'print 2a: '
++ echo 4690
+ result='print 2a: 4690'
+ echo 'return value print 2a: 4690'
return value print 2a: 4690
linux-xingyuncao15:~/opt # ./return2.sh
enter a: 2345
return value print 2a: 4690
linux-xingyuncao15:~/opt #