深入学习Linux Shell:函数调用实战探究 (linux shell 函数调用)

在Linux Shell编程中,函数调用是非常重要且常用的一种编程方式。通过函数调用,可以使Shell脚本更加模块化,代码结构更加清晰,同时也可以提高Shell脚本的可复用性。本文将会深入探究Linux Shell中函数调用的实战应用,帮助读者掌握如何熟练地使用函数调用技术,提高Shell脚本编写技术。

一、Shell脚本中的函数调用

Shell脚本中的函数调用主要有两种方式,分别是使用函数名和使用函数文件。使用函数名是指在Shell脚本中定义函数,然后在脚本中直接调用该函数。这种方式的优点是简单直观,但函数也只能在当前脚本中使用。使用函数文件则是将函数定义在单独的文件中,然后通过source命令或.命令引入该文件,然后在脚本中调用函数。这种方式的优点是方便复用和维护,但也存在一些缺点,如需要保证函数文件的路径正确。

二、函数调用实战应用

为了更加深入地学习函数调用,下面将结合一些实际案例,展示函数调用在Shell脚本中的应用。

1、批量替换文件中的字符串

在Linux Shell中,使用sed命令可以批量替换文件中的字符串,但如果要同时替换多个字符串,那么就需要多次执行sed命令,十分繁琐。这时就可以使用函数调用技术,将多次sed操作封装到一个函数中,然后在脚本中调用该函数。

函数定义:

replace(){

file=$1

Linux_old= $2

Linux_new= $3

sed -i — “s/${Linux_old}/${Linux_new}/g” $file

}

函数调用:

replace file.txt old new

2、批量备份MySQL数据库

在Linux Shell中,使用mysqldump命令可以备份MySQL数据库。但如果要备份多个数据库,也需要多次执行mysqldump命令,同样非常繁琐。这时也可以使用函数调用技术,将多次mysqldump操作封装到一个函数中,然后在脚本中调用该函数。

函数定义:

backup_db(){

db=$1

user=$2

password=$3

bakdir=$4

filename=${db}_$(date +%Y%m%d).sql

mysqldump -u$user -p$password $db > $bakdir/$filename

}

函数调用:

backup_db testdb root 123456 /backup

3、批量压缩文件

在Linux Shell中,使用gzip命令可以压缩文件,但如果要同时压缩多个文件,也需要多次执行gzip命令,同样十分繁琐。同样可以使用函数调用技术,将多次gzip操作封装到一个函数中,然后在脚本中调用该函数。

函数定义:

compress_file(){

filepath=$1

gzip $filepath

}

函数调用:

for file in $(ls /data/*.txt);do

compress_file $file

done

三、

函数调用是Linux Shell编程中非常重要的技术,通过函数调用可以使Shell脚本更加模块化,代码结构更加清晰,同时也可以提高Shell脚本的可复用性。本文通过一些实际应用案例,展示了函数调用技术在Shell脚本中的应用,希望读者可以通过本文对函数调用技术有一个全面的认识,同时也可以在实际编程中更加熟练地使用函数调用技术提高Shell脚本编写技术。

相关问题拓展阅读:

Linux的Shell相关知识简要描述几种主流的shell及特点!!!

什么是shell script

将OS命令堆积到可执行的文件里,由上至下的顺序执行文本里的OS命令 就是脚本了.

再加上些智能(条件/流控)控制,就变成了智能化脚本了.

变量

变量声明

bash中的变量无须声明,拿来就用.类型会根据赋予的值来决定

a=abc

b=123

c=(123)

d=$(uname -r)

unset a

declare -p var_name 可以查看

引用变量

在变量名前加上 $ 符号

echo $a

作用范围

全局

export var=abc

. 或 source

局部

子进程中

函数中

操作符

算旁判术操作

+ – * / %

关系操作

= == != && ||

测试操作

测试命令 test > (( ))

1、测试文件状态

-d 目录

-s 文件长度 > 0、非空

-f 正规文件

-w 可写

-L 符号连接

-u 文件有 suid 位设置

-r 可读

-x 可执行

$

$ echo $?

0

2、字符串测试

= 两个字符串相等

!= 两个字符串不相等

-z 空串

-n 非空串

$ VAR1=’abc’

$ VAR2=’123′

$

$ echo $?

1

3、测试数值

-eq 等于

-ne 不等于

-gt 大于

-lt 小于

-ge 大于等于

-le 小于等于

4. 拓展测试符号 > (())

数字测试符号

# > # 结果错误

# echo $?

0

# 10 >> # 正确

# echo $?

0

# (( 10 /dev/null && echo 192.168.1.$i) &

done

让文件测试脚本支持多个参数

# vim 1.sh

#!/bin/bash

for i in $@

do

if >

then

echo “$i is directory.”

elif >

then

echo “$i is block device.”

elif >

then

echo “$i is a regular file.”

else

echo “unknow.”

fi

done

修改脚本使脚本最多支持3个参数,多个参数或0个参数报错,并退出脚本.

3 || $# = 0 >> && echo “USAGE: $0 ERROR” && exit 1

使用测试

修改脚本告诉用户错误原因.

case 结构语法 用户登录欢迎

# cat 4.sh

#!/bin/bash

case $1 in

root)

echo “welcome $1”

;;

seker)

echo “welcome $1”

;;

*)

echo “no user $1”

esac

添加上与用户交互的功能

read -p “username: ” uname

如果等待时间内用户没输入 则采用默认值

read -p “username: ” -t 5 uname

echo

if >

then

uname=default

fi

case $uname in

root)

echo “welcome $uname”

;;

seker)

echo “welcome $uname”

;;

default)

echo “welcome $uname”

;;

*)

echo “no user $uname”

esac

再修改脚本 让用户输入密码

然后比对密码是否一致,如果不一致,则不显示欢迎信息

#cat 4.sh

#

read -p “username: ” -t 5 uname

echo

stty -echo

read -sp “password: ” paswd

stty echo

echo

if >

then

uname=default

fi

case $uname$paswd in

‘root111’)

echo “welcome $uname”

;;

‘seker222’)

echo “welcome $uname”

;;

‘default333’)

echo “welcome $uname”

;;

*)

echo “no user $uname”

esac

# case的字符测试还可以使用 | 结构 例如: a|b)

启动脚本

循环结构

while 语法

while (条件)

do

动作

done

需要无限循环时我们会选择while :

写个脚本 让用户输入,输入数字通过,输出错误重新输入

#!/bin/bash

retry=0

while

do

read -p “enter a num : ” aa

if expr $aa + 0 &> /dev/null

then

echo OK..

retry=1

else

echo “enter error.retry..”

fi

done

# cat 5.sh

#!/bin/bash

i=1

while (( $i /dev/null

#

回收站 恢复

# cat /bin/undel

#!/bin/bash

for i in $*

do

find ~/.trash -maxdepth 1 -name “$i” -exec mv {} . \;

done

#

数组

数组就是若干个变量组合在一起 每个变量的值都是数组的元素

元素都在数组中有一个下标 下标从0开始

数组赋值:

# ary=(root seker zorro blues pg)

取值方法:

之一个元素

# echo ${ary}

root

#

第三个元素

# echo ${ary}

zorro

#

所有元素

# echo ${ary} ; echo ${ary}

root seker zorro blues pg

root seker zorro blues pg

#

#

第二个到第四个元素

# echo ${ary:1:3}

seker zorro blues

#

下标大于等于2的所有元素

# echo ${ary:2}

seker zorro blues pg

#

下标小于2的所有元素

# echo ${ary::2}

root seker

#

元素个数

# echo ${#ary}

最后一个元素

# echo ${ary}-1))>}

4pg

倒数第2个元素

# echo ${ary}-2))>}

3blues

#

for批量对数组赋值

# ary=($(for i in {0..99};do echo $RANDOM;done))

# echo ${#ary}

100

打印数组中所有的奇数和偶数

用数组个数中的奇数值覆盖偶数值,例如第1个元素覆盖第2个 第3个元素覆盖第4个元素

从文件中读取每行赋予一个数组的方法

生成随机数 赋予数组 进行排序

找出/etc/下最新的文件和最旧的文件 modify time

变量测试

${var-value} 和 ${var:-value}

– 号 如果变量设置为空则返回空值

:-号 如果变量设置为空则返回临时值

变量没声明 则临时赋值,否则使用原值

#

# unset var

# echo ${var-value}

value

# echo ${var:-value}

value

# var=123

# echo ${var-value}

123

# echo ${var:-value}

123

# var=””

# echo ${var-value}

# echo ${var:-value}

value

#

+ 号 如果变量

# unset var

# echo ${var+value}

# echo ${var:+value}

# var=123

# echo ${var+value}

value

# echo ${var:+value}

value

# var=””

# echo ${var+value}

value

# echo ${var:+value}

#

Linux系统管理与服务器配置这本书上,在228页第17章。。。

我是这么做的,大家可以参考参考。。

?在网上搜索Linux的滚枣Shell相关知识简要描述几种主流的shell及特点;

答:Linux是由UNIX演化而来的,从而也继承了UNIX的sell,在大部分的UNIX系统。三种著名且广被支持的Shell是:Bourne shell(AT&T shell,在Linux下是BASH),

C shell(Berkeley shell,在Linux下是TCSH),Korn shell(Bourne shell的超集)。三种shell各有优缺点

Bourne shell是标准的UNIIX shell,是UNIX最初使用的shell,并且在每种UNIX上都可以使用,常被用来作为管理系统之用,大激拆它简洁,快速,多用于shell编程方面,但与用户的交互性较差

C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本,Linux下的C shell则更多的考虑到了用户界面的而友好性,

它支持不少新功能。例如:提供了一个命令列(command line)编辑程序,提供了命令列不全功能,提供了拼写更正功铅闭能。它能自动检测并更正在命令列拼错的命令或单字;

危险命令侦测并提醒的功能,避免用户小心执行rm*这种杀伤力极大的命令;提供常用命令的快捷方式

BASH shell是Linux下对Bourne shell向下兼容的一种shell,并融入许多C shell与Korn shell的功能

最常见的有:早搜

Born shell: 最早,所有的毁友Unix和Linux上肯定都能用

csh: 与C语言有些像,如果会C, 这个肯定觉得很容易

ksh: Korn shell, 比上两种要好。特别是纤睁槐可以修改指令行(command line editing), 真是不可少。

bash: Born again shell, 改进版的Born shell。大概是Linux上最常用的

个人认为从ksh或bash中选一即可。

哥们,我也是东软的,求解啊

如何写一个shell脚本在Linux下来运行main函数

这行告桥要看你的main函数是什么语言的了,如果是shell里面的函数,可以这么写:

main() {

echo “”

)

echo “start”

main

echo “end”

exit 0

如果是其他语言,那你可以直接调用编译后的可执行程序:

echo “start”

main

echo “end”

如果有入参,可以在main后面直接写,用空格分割

那就好说了,首先你得在linux安装JDK,然后把JAVA_HOME、CLASSPATH和PATH这几个环境变量友启设档猛置好,然后把上面的main换成

java 程序,这个程序需要是javac后的

你拆升可以在shell中添加命令啊

gcc hello.c 你的shell和hello.c在拦汪同一个目录

要不就加上路径简御仔

./a.out

关于linux shell 函数调用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 深入学习Linux Shell:函数调用实战探究 (linux shell 函数调用)