首页 > 系统相关 >shell函数

shell函数

时间:2024-06-18 18:59:31浏览次数:29  
标签:opt test2 函数 sh echo shell hanshu1 root

shell函数

函数定义:

将命令序列按照格式写在一起。格式指的是函数的固定格式。 两种格式

函数作用:

方便重复使用。函数库,集中在一起,随时可以传参调用。大的工程分割成若干个小的功能模块,提高代码的可读性。

函数的格式

格式1
function shoping {
​
           命令序列
}
格式2
shoping () {
       命令序列
​
}

函数名后的参数可以为空

[root@test2 opt]# vim hanshu1.sh
function abc {
​
     sum=$(($a*2))
     echo $sum 
}
a=10
abc
​
[root@test2 opt]# vim hanshu1.sh
function abc {
read -p "输入一个数" sum
     a=$(($sum*2))
     echo $a 
}
​
abc
函数中的$?
function abc {
read -p "输入一个数" sum
     sum=$(($sum*2))
     return $sum
}
abc
echo $?    表示打印函数中的结果
return的作用

return只能写在函数的内部,目的是从函数内部获取一个返回值,用来判断是否继续执行下一个脚本。

echo $? 这个时候不再是判断结果,只是一个函数内部的返回值,在使用return传回码的时候,默认0是成功,非0都是失败。返回码可以自定义,但是范围在0-255内。

[root@test2 opt]# vim hanshu1.sh
function abc {
read -p "输入一个数" sum
    if [ $sum -eq $sum ] &> /dev/null
    then
     sum=$(($sum*2))
     return 0
     else
     echo "输入错误"
    return 1
fi
}
abc
if [ $? -eq 0 ]
then
echo “ok”
else
exit
fi
wq!

结果

[root@test2 opt]# sh hanshu1.sh 
输入一个数10
ok
[root@test2 opt]# sh hanshu1.sh 
输入一个数test
输入错误
[root@test2 opt]# 
​

函数的传参方式以及函数变量的作用范围

外部赋值
[root@test2 opt]# vim hanshu1.sh
​
sum () {
​
   num=$(($1+$2))
echo $num
}
sum $1 $2
结果    在外部赋值
[root@test2 opt]# sh hanshu1.sh 10 20
30
内部赋值
[root@test2 opt]# vim hanshu1.sh
sum () {
​
   num=$(($a+$b))
echo $num
}
a=10
b=20
sum $1 $2
结果   在函数内部赋值
[root@test2 opt]# sh hanshu1.sh 
30
[root@test2 opt]# vim hanshu1.sh
​
sum () {
​
   num=$(($1+$2))
echo $num
}
read -p "输入一个数" num1
read -p "输入一个数" num2
sum $num1 $num2
​
[root@test2 opt]# sh hanshu1.sh 
输入一个数10
输入一个数20
30
函数变量
[root@test2 opt]# vim hanshu1.sh
​
abc () {
​
   a=5
   b=6
}
a=8
b=9
abc
echo $a
echo $b
结果
[root@test2 opt]# sh hanshu1.sh 
5
6

在函数内部定义了全局变量,外部的赋值是不能改变内部函数的全局变量的

加了local之后,就是函数内部的变量,而不再是全局变量,外部的赋值会替换内部的变量值

[root@test2 opt]# vim hanshu1.sh
​
abc () {
​
  local a=5
  local b=6
        c=10
}
a=8
b=9
c=11
abc
echo $a
echo $b
echo $c
结果   加了local之后的结果
[root@test2 opt]# sh hanshu1.sh 
8
9
10
[root@test2 opt]# vim hanshu1.sh
​
abc () {
  echo "inside1 $a"
  let a++
  local a
       a=8
echo "inside2 $a"
}
a=9
abc
echo "outside $a"
结果
[root@test2 opt]# sh hanshu1.sh 
inside1 9
inside2 8
outside 10

函数递归

函数递归:函数调用自己本身的函数

阶乘 4的阶乘 4 3 2 1 =24

用函数递归的方式实现阶乘
[root@test2 opt]# vim hanshu1.sh
​
jc () {
    if [ $1 -eq 1 ]
     then
      echo 1
     else
    local temp=$(($1-1))
   local result=$(jc $temp)
     echo "$(($1*$result))"
​
fi
}
read -p "输入一个数" num
result1=`jc $num`
echo $result1
结果
[root@test2 opt]# sh hanshu1.sh 
输入一个数5
120
#递归目录。把/etc目录下,所有的文件递归出来,如果只是目录且该目录下没有文件就打印目录。否则继续

#打印,直到目录里面没有文件为止

[root@test2 opt]# vim hanshu1.sh
digui () {
for file in `ls $1`
do
     if [ -d "$1/$file" ]
       then
       echo "$1$file"
         digui "$1/$file"
          else
       echo "$1/$file"
      fi
   done
}
digui $1
结果
[root@test2 opt]# sh hanshu1.sh /opt
/opt/1
/opt/hanshu1.sh
/opt/hosts.txt
/opttest1
/opt/test1/aaa
/opt/test1test2
/opt/test1.sh
/opttest2
/opt/test2.sh
/opt/users.txt

函数库

函数库中只包含定义的函数,有另外一个脚本传入参数来调用定义的函数。

[root@test2 opt]# vim dy.sh
. /opt/hanshu1.sh
read -p "输入一个数" sum1
read -p "输入一个数" sum2
a=`jiafa $sum1 $sum2`
b=`jianfa $sum1 $sum2`
c=`chengfa $sum1 $sum2`
echo $a
echo $b
echo $c
​
jiafa () {
   result=$(($1+$2))
   echo $result
}
jianfa () {
   result=$(($1-$2))
   echo $result
}
chengfa () {
   result=$(($1*$2))
   echo $result
}
​
[root@test2 opt]# sh dy.sh 
输入一个数10
输入一个数20
30
-10
200

实验1 将以.txt的文件复制到/opt/dec

[root@test2 opt]# vim test1.sh 
digui () {
for file in `ls $1`
do
     if [ -d "$1/$file" ]
         then
         echo "$file"
         digui "$1/$file"
    else
         if [[ "$file" == *.txt ]]
         then
         cp "$file" /opt/dec
         else
         echo "$file"
         fi
      fi
   done
}
digui $1
结果
[root@test2 opt]# sh test1.sh /opt
!
1
dec
dy.sh
hanshu1.sh
test1
aaa
test2
test1.sh
test2
test2.sh
[root@test2 opt]# ll /opt/dec
总用量 8
-rw-r--r--. 1 root root 94 6月  18 15:08 hosts.txt
-rw-r--r--. 1 root root 13 6月  18 15:08 users.txt
​

实验2 调用小数运算,保留小数点后两位。

[root@test2 opt]# vim hanshu1.sh 
​
jiafa () {
   result=$( echo "cale=2; $1+$2" | bc )
echo $(scale=2;result)
}
​
jianfa () {
   result=$( echo "scale=2; $1-$2" | bc )
echo $result
}
chengfa () {
   result=$( echo "scale=2; $1*$2" | bc )
echo $result
}
​
调用
[root@test2 opt]# vim dy.sh 
​
. /opt/hanshu1.sh
read -p "输入一个数" sum1
read -p "输入一个数" sum2
​
a=`jiafa $sum1 $sum2`
b=`jianfa $sum1 $sum2`
c=`chengfa $sum1 $sum2`
​
echo $a
echo $b
echo $c
​
结果
[root@test2 opt]# sh dy.sh 
输入一个数2.22
输入一个数2.22
4.44
0
4.92

标签:opt,test2,函数,sh,echo,shell,hanshu1,root
From: https://blog.csdn.net/2402_84844434/article/details/139775111

相关文章

  • shell函数
    shell函数定义:将命令序列按照格式写在一起。格式指的是函数的固定格式。作用:方便重复使用,可以生成函数库,集中在一起随时可以传参调用。      大的工程分割成若干个小的功能模块,提高代码的可读性。函数的格式:1.function shoping{    命令序列}2. ......
  • 希望六月:参加阿里云 PolarDB 与「AI函数计算」动手活动,送博客园T恤
    没想到今年六月是园子与阿里云的推广合作季,同时有好几个推广项目在合作,比如:阿里云开发者社区有奖征文活动,期待您出文相助「指间灵动,快码加编」:阿里云通义灵码,再次降临博客园阿里云618创新加速季,5亿补贴享不停,上云礼包抢先领再加上今天发布的PolarDB与AI函数计算动手活动......
  • python函数声明(参数/返回值注释)和三个双引号用法
     1#python的"""三个双引号两种用法:(1)多行注释(2)定义多行字符串2deff1(ham:42,eggs:int='spam')->"Nothingtoseehere":3print("函数注释",f1.__annotations__)#函数注释{'ham':42,'eggs':<cl......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
        农村高中是处于国内各乡镇地区的普通全日制高级中学,属于农村教育的“终极”阶段。从农村高中所处的区位条件来讲,当下国内城镇化进程不断加快,农村高中生源呈现为逐年递减的全新变化形势,同时面临着新课标下数学核心素养培养的新要求与任务。然而,以往农村高中数学教学实践......
  • 函数this
    startRecording(){  //创建WebSocket连接  this.ws=newWebSocket('ws://20.33.15.6:8841/bank/audio/detection?deviceNo=1');  //初始化AudioContext  this.audioContext=newAudioContext({sampleRate:this.sampleRate});  constthat=......
  • shell --- sed 命令
    sed命令经常用于替换字符串,格式为"sed-i's/旧字符串/新字符串/g'文件名",注意有单引号,下同。其中的-i表示实质改变文件内容,如果缺少则不会改变文件;g表示全局替换,如果缺少则只会替换每一行第一次出现的字符串,如下面所示:#将test.txt中所有的a替换为Ased-i's/a/A/g'test.tx......
  • 推荐一个在线php函数转go函数的网站
    之前一直写php,写过php的人都知道php里面字符串、数组函数好用的非常多,转到go之后,写代码难免会受到一些影响https://www.php2golang.com/这个网站就是可以把常见的php函数转成go实现,当然也不一定全部都有比如strstr函数......
  • 好用的库函数,qsort函数大详解(干货满满!)(进阶)
    前言:  小编在上一篇文章说了这一篇将要写qsort函数的模拟实现,那么废话不多说,现在开始进入今天的代码之旅喽!目录:1.qsort函数的模拟实现的逻辑和思路2.qsort函数模拟实现的代码实现3.代码展示1.qsort函数的模拟实现的逻辑和思路  读者朋友们是否还记得小编之前说过......
  • C/C++ main 函数注意事项
    main 函数是C/C++程序的入口点,当运行程序时,操作系统会调用 main 函数来启动程序。下面为 main 函数的注意事项:函数签名:在C/C++中,main 函数的标准签名通常有两种形式:intmain(){//...}intmain(intargc,char*argv[]){//...}其中,argc 是命......
  • 使用 shell 快速生成字符串的哈希值
    使用方式echo-n"dev"|sha256sum|cut-d''-f1此外也可以使用md5sum、sha224sum、sha1sum等,替换命令中的sha256sum即可。命令解释echo将字符串"dev"通过管道符传递给标准输出,-n选项可以去掉多余的换行符sha256sum本身接收的参数是文件路径,如果不指定,则从标......