返回列表 发帖

Shell脚本中的函数

Shell脚本中的函数:有时脚本中的某段代码总是被重复使用,那么可以将其写成函数,每次要用到时直接调用该函数即可。


例子一:
[root@localhost ~]# cat xx.sh
#!/bin/bash

function gc_ff() #自定义函数
{
    echo "##### Welcome to zhuohua. #####"
    echo "1: Install Apache"
    echo "2: Install MySQL"
    echo "3: Install PHP"
    echo "4: Exit current script"
    echo "#####################################"
    read -p "Enter your choice (1, 2, 3, 4): " action1
}

gc_ff #先执行一次函数gc_ff()

if [ $action1 -eq 1 ]; then
echo "Installing Apache..."
echo "Install Apache completed,enjoy it!"
echo ""
gc_ff #再执行一次函数gc_ff()
fi

if [ $action1 -eq 2 ]; then
echo "Installing MySQL..."
echo "Install MySQL completed,enjoy it!"
echo ""
echo ""
gc_ff #再执行一次函数gc_ff()
fi

if [ $action1 -eq 3 ]; then
echo "Installing PHP..."
echo "Install PHP completed,enjoy it!"
clear #清屏
gc_ff #再执行一次函数gc_ff()
fi


脚本运行的效果:
[root@localhost ~]# bash xx.sh
##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
3: Install PHP
4: Exit current script
#####################################
Enter your choice (1, 2, 3, 4): 1  
Installing Apache...
Install Apache completed,enjoy it!


##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
3: Install PHP
4: Exit current script
#####################################
Enter your choice (1, 2, 3, 4): 2
Installing MySQL...
Install MySQL completed,enjoy it!



##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
3: Install PHP
4: Exit current script
#####################################
Enter your choice (1, 2, 3, 4): 3
Installing PHP...
Install PHP completed,enjoy it!
  ##注释:这里已经被清屏

##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
3: Install PHP
4: Exit current script
#####################################
Enter your choice (1, 2, 3, 4): 4
[root@localhost ~]#





######
######

例子二:
[root@localhost ~]# cat yy.sh
#!/bin/bash

function Gc_ff_1() #自定义函数
{
    echo "##### Welcome to zhuohua. #####"
    echo "1: Install Apache"
    echo "2: Install MySQL"
    echo "c: Install PHP"
    echo "q: Exit current script"
    echo "#####################################"
    read -p "Enter your choice (1, 2, c, q): " Action_1
}

function Gc_ff_2() #自定义函数
{
echo "Installing PHP..."
echo "Install PHP completed,enjoy it!"
clear #清屏
Gc_ff_1 #再执行一次函数Gc_ff_1()
}

Gc_ff_1 #先执行一次函数Gc_ff_1()

case $Action_1 in
1)
echo "Installing Apache..."
echo "Install Apache completed,enjoy it!"
echo ""
Gc_ff_1 #再执行一次函数Gc_ff_1()
esac

case $Action_1 in
2)
echo "Installing MySQL..."
echo "Install MySQL completed,enjoy it!"
echo ""
echo ""
Gc_ff_1 #再执行一次函数Gc_ff_1()
esac

case $Action_1 in
c)
Gc_ff_2 #执行一次函数Gc_ff_2()
esac

case $Action_1 in
q)
exit 0 #终止脚本的运行
esac


脚本运行的效果:
[root@localhost ~]# bash yy.sh
##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
c: Install PHP
q: Exit current script
#####################################
Enter your choice (1, 2, c, q): 1
Installing Apache...
Install Apache completed,enjoy it!


##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
c: Install PHP
q: Exit current script
#####################################
Enter your choice (1, 2, c, q): 2
Installing MySQL...
Install MySQL completed,enjoy it!



##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
c: Install PHP
q: Exit current script
#####################################
Enter your choice (1, 2, c, q): c
Installing PHP...
Install PHP completed,enjoy it!
##注释:这里已经被清屏

##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
c: Install PHP
q: Exit current script
#####################################
Enter your choice (1, 2, c, q): q
[root@localhost ~]#





######
######

例子三:
[root@localhost ~]# cat zz.sh
#!/bin/bash

Display_Install_Menu_1() #自定义函数
{
    echo "##### Install Apache #####"
    echo "1: Install Apache2.2"
    echo "2: Install Apache2.4"
    echo "q: Exit current script"
    echo "###"
    read -p "Enter your choice (1, 2, q): " action1
        if [ $action1 == "1" ]; then
                echo "You will install Apache2.2"
        elif [ $action1 == "2" ]; then
                echo "You will install Apache2.4"
        elif [ $action1 == "q" ]; then
                exit 0 #终止脚本的运行
        fi
    Display_Install_Menu_2 #执行一次函数Display_Install_Menu_2()
}

Display_Install_Menu_2() #自定义函数
{
    echo "##### Install MySQL #####"
    echo "1: Install MySQL5.5"
    echo "2: Install MySQL5.6"
    echo "3: Install MySQL5.7"
    echo "q: Exit current script"
    echo "###"
    read -p "Enter your choice (1, 2, 3, q): " action2
        if [ $action2 == "q" ]; then
                exit 0 #终止脚本的运行
        fi
        Display_Install_Menu_3 #执行一次函数Display_Install_Menu_3()
}

Display_Install_Menu_3() #自定义函数
{
    echo "##### Install PHP #####"
    echo "1: Install PHP5.6"
    echo "2: Install PHP7.0"
    echo "3: Install PHP7.1"
    echo "4: Install PHP7.2"
    echo "q: Exit current script"
    echo "###"
    read -p "Enter your choice (1, 2, 3, 4, q): " action_3
        if [ $action_3 == "q" ]; then
                exit 1 #终止脚本的运行
        fi
}

Display_Install_Menu_4() #自定义函数
{
echo ""
echo "Installing Apache2.4..."
echo "Install Apache2.4 completed,enjoy it!"
echo "Installing MySQL5.6..."
echo "Install MySQL5.6 completed,enjoy it!"
echo "Installing PHP7.2..."
echo "Install PHP7.2 completed,enjoy it!"
echo ""
}

Display_Install_Menu_1 #先执行一次函数Display_Install_Menu_1()

if [ $action1 == "1" ] && [ $action2 == "1" ] && [ $action_3 == "1" ]; then
echo ""
echo "Installing Apache2.2..."
echo "Install Apache2.2 completed,enjoy it!"
echo "Installing MySQL5.5..."
echo "Install MySQL5.5 completed,enjoy it!"
echo "Installing PHP5.6..."
echo "Install PHP5.6 completed,enjoy it!"
echo ""

elif [ $action1 == "2" ] && [ $action2 == "1" ] && [ $action_3 == "1" ]; then
echo ""
echo "Installing Apache2.4..."
echo "Install Apache2.4 completed,enjoy it!"
echo "Installing MySQL5.5..."
echo "Install MySQL5.5 completed,enjoy it!"
echo "Installing PHP5.6..."
echo "Install PHP5.6 completed,enjoy it!"
echo ""

elif [ $action1 == "2" ] && [ $action2 == "2" ] && [ ${action_3} == "4" ]; then
    Display_Install_Menu_4 #执行一次函数Display_Install_Menu_4()
fi


脚本运行的效果:
[root@localhost ~]# bash zz.sh
##### Install Apache #####
1: Install Apache2.2
2: Install Apache2.4
q: Exit current script
###
Enter your choice (1, 2, q): 1
You will install Apache2.2
##### Install MySQL #####
1: Install MySQL5.5
2: Install MySQL5.6
3: Install MySQL5.7
q: Exit current script
###
Enter your choice (1, 2, 3, q): 1
##### Install PHP #####
1: Install PHP5.6
2: Install PHP7.0
3: Install PHP7.1
4: Install PHP7.2
q: Exit current script
###
Enter your choice (1, 2, 3, 4, q): 1

Installing Apache2.2...
Install Apache2.2 completed,enjoy it!
Installing MySQL5.5...
Install MySQL5.5 completed,enjoy it!
Installing PHP5.6...
Install PHP5.6 completed,enjoy it!


[root@localhost ~]#



[root@localhost ~]# bash zz.sh
##### Install Apache #####
1: Install Apache2.2
2: Install Apache2.4
q: Exit current script
###
Enter your choice (1, 2, q): 2
You will install Apache2.4
##### Install MySQL #####
1: Install MySQL5.5
2: Install MySQL5.6
3: Install MySQL5.7
q: Exit current script
###
Enter your choice (1, 2, 3, q): 2
##### Install PHP #####
1: Install PHP5.6
2: Install PHP7.0
3: Install PHP7.1
4: Install PHP7.2
q: Exit current script
###
Enter your choice (1, 2, 3, 4, q): 4

Installing Apache2.4...
Install Apache2.4 completed,enjoy it!
Installing MySQL5.6...
Install MySQL5.6 completed,enjoy it!
Installing PHP7.2...
Install PHP7.2 completed,enjoy it!

[root@localhost ~]#





######

让系统用户使用远程客户端工具SSH登录服务器时,自动运行某个脚本:


先创建一个系统用户zhuohua:
[root@localhost ~]# useradd zhuohua
[root@localhost ~]#

给系统用户zhuohua设置密码:
[root@localhost ~]# echo '123' | passwd --stdin zhuohua
更改用户 zhuohua 的密码 。
passwd: 所有的身份验证令牌已经成功更新。

[root@localhost ~]#


查看系统用户zhuohua的家目录:
[root@localhost ~]# ls -alh /home/zhuohua/
总用量 24K
drwx------  3 zhuohua zhuohua 4.0K 6月  23 02:35 .
drwxr-xr-x. 6 root    root    4.0K 6月  23 02:35 ..
-rw-r--r--  1 zhuohua zhuohua   18 3月  23 2017 .bash_logout
-rw-r--r--  1 zhuohua zhuohua  176 3月  23 2017 .bash_profile
-rw-r--r--  1 zhuohua zhuohua  124 3月  23 2017 .bashrc
drwxr-xr-x  2 zhuohua zhuohua 4.0K 11月 12 2010 .gnome2
[root@localhost ~]#

原始文件内容:
[root@localhost ~]# cat /home/zhuohua/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
[root@localhost ~]#



创建脚本存放目录,并存放需要用到的脚本:
[root@localhost ~]# mkdir /scripts
[root@localhost ~]# cp xx.sh /scripts/
[root@localhost ~]#

设置脚本权限:
[root@localhost ~]# ll /scripts/xx.sh
-rw-r--r-- 1 root root 797 6月  23 02:37 /scripts/xx.sh
[root@localhost ~]#
[root@localhost ~]# chmod a+x /scripts/xx.sh
[root@localhost ~]#
[root@localhost ~]# ll /scripts/xx.sh
-rwxr-xr-x 1 root root 797 6月  23 02:37 /scripts/xx.sh
[root@localhost ~]#


让系统用户zhuohua每次登录时,自动运行指定的脚本:
[root@localhost ~]# echo 'bash /scripts/xx.sh' >> /home/zhuohua/.bash_profile
[root@localhost ~]#
[root@localhost ~]# cat /home/zhuohua/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
bash /scripts/xx.sh
[root@localhost ~]#


测试:
[root@localhost ~]# su zhuohua
[zhuohua@localhost root]$
[zhuohua@localhost root]$ exit
exit
[root@localhost ~]#
[root@localhost ~]# su - zhuohua
##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
3: Install PHP
4: Exit current script
#####################################
Enter your choice (1, 2, 3, 4): 1
Installing Apache...
Install Apache completed,enjoy it!


##### Welcome to zhuohua. #####
1: Install Apache
2: Install MySQL
3: Install PHP
4: Exit current script
#####################################
Enter your choice (1, 2, 3, 4):


###
尝试让系统用户zhuohua使用远程客户端工具SSH登录服务器:
图片1.png
2023-6-26 17:06


图片3.png
2023-6-26 17:04


至此理应会自动运行脚本“/scripts/xx.sh”:
图片4.png
2023-6-26 17:04






相关文章:
if语句
case语句
用户管理

Python3脚本中的自定义函数

返回列表