shell函数使用,shell内置命令
目录
简介
完成特定功能的代码片段
在shell中定义函数可以用代码模块化,便于复用代码
函数必须先定义才可以使用
函数格式
传参 $1 $2
变量 local
返回值 return $?
方法1
函数名(){ 函数要实现的功能代码 }
方法2
function 函数名(){ 函数要实现的功能代码 }
实例讲解
shell1.sh
阶乘
#!/usr/bin/bash
#! /bin/bash
#! /bin/env bash
factorial(){
factorial=1
#下面是c风格的写法
for((i=1;i<=$sum;i++))
do
factoral=${$factorial * $i}
echo "$sum 的阶乘: $factorial"
done
#执行函数
factorial
#或者
#函数里面的位置变量是这个函数的,不是整个脚本的,需要在执行的时候连接起来
factorial=1
#for((i=1;i<=$1;i++))
#for((i=1;i<=$1;i++))
#也可以这样写
for i in `seq $1`
do
#factoral=${$factorial * $i}
#或者这样写
#let factoral*=*$i
let factoral=$factoral*$i
echo "$1 的阶乘: $factorial"
done
#执行函数时,调用了脚本的$1,函数的$1
factorial $1
#执行函数时,调用了脚本的$2,函数的$1,以此类推
factorial $2
}
shell1.sh
提示用户输入个值,然后返回
#!/usr/bin/bash
#! /bin/bash
#! /bin/env bash
fun2(){
read -p "enter number: " num
let 2*num
}
#函数的返回值是函数的最后一条命令执行的结果的返回值
fun2
echo "return $?" #返回0
#------------------------------#
fun2(){
read -p "enter number: " num
return $[2*$num] #小于等于255
}
#函数的返回值是函数的最后一条命令执行的结果的返回值
fun2
#echo "return $?" #返回0,shell返回值的大小不能超过255,会有错误的结果
#
#------------------------------#
#返回大于255的数
fun2(){
read -p "enter number: " num
echo $[2*$num] #小于等于255
}
#函数的返回值是函数的最后一条命令执行的结果的返回值
result=`fun2`
echo "return $result" #函数的输出
shell2.sh 函数参数使用
#!/bin/bash
if [ $# -ne 3]; then
echo "usage: `basename $0` pa1 pa2 pa3"
exit
fi
fun3(){
echo "$(($1*$2*$3))"
}
result=`fun3 $1 $2 $3`
echo "resule: $result"
shell3.sh 函数参数使用数组
#!/bin/bash
#脚本执行所有参数
#或者for i in $* 或"$@"
for i
do
let num+=$i
done
echo $num
num =(1,2,3)
echo "${num[@]}"
array(){
farcty=1 #全局变量,函数外边可以使用
local farcty2=1 #局部变量
for i in "$@" #获得所有参数,或者$* 或者 for i in ${num[*]}
do
#farcty*=$i
farcty=$[farcty*$i]
done
}
#array ${num[@]} #数组所有参数
array ${num[*]} #数组所有参数
shell4.sh 函数参数使用数组,返回数组
函数接收位置参数 $1 $2…$n
*函数接收数组变量 $* 或者 $@*
*** 参数个数 $# ***
*函数将接收到的所有参数赋值给数组 array=($*)*
#!/bin/bash
#脚本执行所有参数
#或者for i in $* 或"$@"
num =(1,2,3)
num2 =(1,2,3)
echo "${num[@]}"
array(){
echo "all: $*"
farcty=1 #全局变量,函数外边可以使用
local farcty3=() #局部变量
local farcty2=1 #局部变量
local newarray=(`echo $*`) #创建新数组,或者newarray=($*)
for((i=0;i<$#;i++)) # $#接收参数的个数
do
outarry[$i]=$[ ${newarray[$i]} *5 ]
#或者outarry[$i]=$(( ${newarray[$i]} *5 ))
done
echo "${outarray[*]}"
}
#函数通过 一下两种方式传所有
#array ${num[@]} #数组所有参数
#array ${num[*]} #数组所有参数
result=`array ${num[*]}`
echo "{get $result[*]}"
#——————————————————————————————————————#
num =(1,2,3)
array(){
#for((i=0;i<$#;i++)) # $#接收参数的个数
local i
local j
local out=()
for i in $* # 也可以这样写
# for i 相当于 for i in $*
#do
#
#done
#
do
out[j++]=$[$i*5]
done
echo "${out[*]}"
}
#函数通过 一下两种方式传所有
#array ${num[@]} #数组所有参数
#array ${num[*]} #数组所有参数
result=`array ${num[*]}` #在子shell中执行
echo "get ${result[*]}"
#——————————————————————————————————————————————————#
函数的内置命令
:
返回一个真值
* break,continue exit
#!/usr/bin/bash
for i in {A..D}
do
echo -n $i #不换行
for j in {1...9}
do
if [ $j -eq 5 ];then
break 2 #跳几层 #空行可用continue跳出 只作用于循环
fi
echo -n $j #不换行
done
echo #换行
done
- shift使用
执行以下脚本 shell.sh 1 2 3
#!/usr/bin/bash
#for i in
while [ $# -ne 0 ]
do
let sum+=$i
shift 1 #位置参数向左移动一位
done
echo "sum: $sum"
#!/usr/bin/bash
#for i in
while [ $# -ne 0 ]
do
useradd $1
echo "$1 create "
shift 1 #位置参数向左移动一位
done
echo "sum: $sum"