Linux--位置参数,参数移位,随机数,数組,函数,函数递归
2012-11-10 01:05
316 查看
位置参数:
linux 程序中会大量用到位置参数,位置参数就形如:
mkdir a b c d e f g
在以上程序中 mkdir 它自己也是一个参数,它个参数用 $0 表示
后面的参数用 $1 (a) $2(b) $3 (c)
最多到 $10,如果超10,那要用 shift 进行参数移位
参数移位
参数移位就是把后面(右边)的参数,往前(左边)移动,最前面(左边)的参数
覆盖(删除)了,整个参数个数也会少1。
例:
a b c d e f g h
||
|| shift
||
b c d e f g h
||
|| shift
||
c d e f g h
||
|| shift
||
d e f g h
位置参数的表示:
$0 程序本身
$1 - $10 第1个参数、第2个参数、第3个参数...第10个参数
$# 参数个数
$* 所有参数
例:写程序,打印输入指定个数的指定字符
如: xxx * 5 --打5个*,xxx 是你的程序名
xxx # 10 --打10个#,xxx 是你的程序名
随机数:
RANDOM
echo $RANDOM
生成 0-32767 间的随机数,要前生其它随机数,要用间接的方法了
例:生成 0-100 间的随机数
echo $[$RANDOM%101]
例:生成 50-100 间的随机数
echo $[$RANDOM%51+50]
数組
具有相同的名字,不同下票变量集合,如 a[1] a[2] ......
数組定义方法:
方法一:把所有值用小括号括起(值间空格分形),赋給一个变量
如: a=(1 2 3 a b c)
使用:使用它的具体元素,如: echo ${a[0]} echo ${a[5]}
方法二:直接给单个下标赋值
如:b[1]=5
b[10]=8
下标值查看:
echo ${b[*]} 显示所有值,但不会显示下标个数,和下标序号
echo ${#b[*]} 看有多少个值
命令行可以通过set 来看
例:利用随机数与数组产生随机验证码
定义数组:a=(1 2 3 4 .... X Y Z # ^ _)
产生随机数:n
利用随机数作数组下标取数: echo ${a[$n]}
函数:
在shell程序时,经常会遇到反复使用相同或相近的代码段,那这里我们可以将这些代
码,提取出来,构成函数。
函数的优点在于,1、让主程序变得简短。2、方便维护。
函数定义:
FUNCTION function_name() {
}
function_name() {
}
函数返回值:
1、默认以函数最后一条命令返回返回(没有显示的为函数指定返回值时)
2、使用return返回值,只能返回 0-255
例:写个求2个数这和的函数
add() {
sum=$[$1+$2]
return $sum
}
read -p "输入第一个数: " x
read -p "输入第二个数: " y
add $x $y
echo "x+y=$?"
3、在函数中使用echo
add2 () {
sum=$[$1+$2]
echo $sum
}
read -p "输入第一个数: " x
read -p "输入第二个数: " y
add2 $x $y
echo "x+y=`add2 $x $y`"
函数中的变量问题:
程序中使用的变量,我们把它分为全局变量和局部变量
全局变量
未作特别声明都是全局变量,主程序代码中定义的变量都是全局变量,全局变量的作用范围
是从它的定义处,到程序末尾
局部变量
定义的方法:local 变量名
局部变量的作用范围:只在定义它的函数有效,一般来讲函数中的变量都应该声明为局部变量
函数使用:
先定义、后使用,使用时输入函数名即可
FUNCTION 关键字
function_name 函数名
例:定义一个打印函数
function my_print() {
commands
}
也可以
my_print() {
commands
}
例:定义一个打印指定个数*的函数
function my_print() {
n=1
while [ $n -le $1 ]
do
echo -n "*"
n=$[$n+1]
done
}
my_print 5
例:定义一个打印指定个数,指定字符的函数
my_print 5 "*"
my_print 10 "#"
函数递归
自已调用自已
要点:
1、必须有个变量终值时的处理
2、递归调用时,变量值的变化要向终值靠近
#函数递归调用,求阶乘
function jx() {
local n
if [ $1 -eq 1 ]
then
n=1
else
n=$[$1*`jx $[$1-1]`]
fi
echo $n
}
s=`jx 5`
echo "5的阶乘是: $s"
linux 程序中会大量用到位置参数,位置参数就形如:
mkdir a b c d e f g
在以上程序中 mkdir 它自己也是一个参数,它个参数用 $0 表示
后面的参数用 $1 (a) $2(b) $3 (c)
最多到 $10,如果超10,那要用 shift 进行参数移位
参数移位
参数移位就是把后面(右边)的参数,往前(左边)移动,最前面(左边)的参数
覆盖(删除)了,整个参数个数也会少1。
例:
a b c d e f g h
||
|| shift
||
b c d e f g h
||
|| shift
||
c d e f g h
||
|| shift
||
d e f g h
位置参数的表示:
$0 程序本身
$1 - $10 第1个参数、第2个参数、第3个参数...第10个参数
$# 参数个数
$* 所有参数
例:写程序,打印输入指定个数的指定字符
如: xxx * 5 --打5个*,xxx 是你的程序名
xxx # 10 --打10个#,xxx 是你的程序名
随机数:
RANDOM
echo $RANDOM
生成 0-32767 间的随机数,要前生其它随机数,要用间接的方法了
例:生成 0-100 间的随机数
echo $[$RANDOM%101]
例:生成 50-100 间的随机数
echo $[$RANDOM%51+50]
数組
具有相同的名字,不同下票变量集合,如 a[1] a[2] ......
数組定义方法:
方法一:把所有值用小括号括起(值间空格分形),赋給一个变量
如: a=(1 2 3 a b c)
使用:使用它的具体元素,如: echo ${a[0]} echo ${a[5]}
方法二:直接给单个下标赋值
如:b[1]=5
b[10]=8
下标值查看:
echo ${b[*]} 显示所有值,但不会显示下标个数,和下标序号
echo ${#b[*]} 看有多少个值
命令行可以通过set 来看
例:利用随机数与数组产生随机验证码
定义数组:a=(1 2 3 4 .... X Y Z # ^ _)
产生随机数:n
利用随机数作数组下标取数: echo ${a[$n]}
函数:
在shell程序时,经常会遇到反复使用相同或相近的代码段,那这里我们可以将这些代
码,提取出来,构成函数。
函数的优点在于,1、让主程序变得简短。2、方便维护。
函数定义:
FUNCTION function_name() {
}
function_name() {
}
函数返回值:
1、默认以函数最后一条命令返回返回(没有显示的为函数指定返回值时)
2、使用return返回值,只能返回 0-255
例:写个求2个数这和的函数
add() {
sum=$[$1+$2]
return $sum
}
read -p "输入第一个数: " x
read -p "输入第二个数: " y
add $x $y
echo "x+y=$?"
3、在函数中使用echo
add2 () {
sum=$[$1+$2]
echo $sum
}
read -p "输入第一个数: " x
read -p "输入第二个数: " y
add2 $x $y
echo "x+y=`add2 $x $y`"
函数中的变量问题:
程序中使用的变量,我们把它分为全局变量和局部变量
全局变量
未作特别声明都是全局变量,主程序代码中定义的变量都是全局变量,全局变量的作用范围
是从它的定义处,到程序末尾
局部变量
定义的方法:local 变量名
局部变量的作用范围:只在定义它的函数有效,一般来讲函数中的变量都应该声明为局部变量
函数使用:
先定义、后使用,使用时输入函数名即可
FUNCTION 关键字
function_name 函数名
例:定义一个打印函数
function my_print() {
commands
}
也可以
my_print() {
commands
}
例:定义一个打印指定个数*的函数
function my_print() {
n=1
while [ $n -le $1 ]
do
echo -n "*"
n=$[$n+1]
done
}
my_print 5
例:定义一个打印指定个数,指定字符的函数
my_print 5 "*"
my_print 10 "#"
函数递归
自已调用自已
要点:
1、必须有个变量终值时的处理
2、递归调用时,变量值的变化要向终值靠近
#函数递归调用,求阶乘
function jx() {
local n
if [ $1 -eq 1 ]
then
n=1
else
n=$[$1*`jx $[$1-1]`]
fi
echo $n
}
s=`jx 5`
echo "5的阶乘是: $s"
相关文章推荐
- python 函数编程的位置参数、默认参数、关键字参数以及函数的递归
- scala学习之路:4.for循环递归等函数的使用与多参数的传递
- 【Linux学习笔记】28:位置参数变量
- Linux命令行与shell脚本(9)--函数参数
- 编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- javascript中bind()函数实现和应用以及多次bind的结果和参数位置的思考
- C++学习笔记(三)--函数参数,数组函数,指针和const,二维数组函数,递归,函数指针
- JavaSE8基础 File 函数递归输出指定文件夹中的所有文件名(模仿Linux)
- 巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
- python--函数2(位置参数和关键字参数)
- 在不具备gdb环境的类Linux系统开发板上调试段错误,大致定位出错函数位置
- 函数的扩展---函数参数默认值得位置
- 巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
- 巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
- 复习4次课(12月1日) 1.1 函数定义 1.2 函数的参数 1.3 函数的默认参数 1.4 函数的变量 1.5 函数的返回值 1.6 多类型传值和冗余参数 1.7 函数的递归调用
- linux-0.11调试教程,rl_dispatch ()函数调用函数的参数的个数
- 巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
- 函数_实例4_使用位置参数和函数返回结果
- linux c 定义打印时间/文件名/行/函数日志的可变参数宏定义,如果需要的话可以参考
- 《coredump问题原理探究》Linux x86版3.4节栈布局之函数参数