在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脚本在Linux下来运行main函数
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 函数调用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。