2.1.函數的定義和使用 函數基本使用 實例一:寫一個守護進程,nginx如果關閉自動開啟 vim nginx_daemon.sh 把這個腳本放到後臺運行 關閉後查看 2.2.向函數傳遞參數 shell中傳參 函數調用 舉例 2.3.函數的返回值 返回值的方式 使用return返回值 使用retur ...
2.1.函數的定義和使用
函數基本使用
[root@VM_0_9_centos ~]# test() > {} -bash: syntax error near unexpected token `{}' [root@VM_0_9_centos ~]# test() {} -bash: syntax error near unexpected token `{}' [root@VM_0_9_centos ~]# test() > { > echo "test function" > } [root@VM_0_9_centos ~]# test test function [root@VM_0_9_centos ~]# function greeting > { > echo "hello world" > } [root@VM_0_9_centos ~]# greeting hello world [root@VM_0_9_centos ~]#
實例一:寫一個守護進程,nginx如果關閉自動開啟
vim nginx_daemon.sh
#!/bin/bash # #運行腳本的進程id,如果腳本名字有nginx字樣,也需要把這個過濾掉 this_pid=$$ while true do ps -ef |grep nginx |grep -v grep | grep -v $this_pid &> /dev/null if [ $? -eq 0 ];then echo "Nginx is running well!" sleep 3 else systemctl start nginx echo "Nginx is down,start it....." fi done
把這個腳本放到後臺運行
nohup sh nginx_daemon.sh &
關閉後查看
tail -f nohup.out
2.2.向函數傳遞參數
shell中傳參
function name { echo "hello $1" echo "hello $2" }
函數調用
name derek alice
舉例
[root@VM_0_9_centos shell_learn]# function greeting > { > echo "Hello $1" > } [root@VM_0_9_centos shell_learn]# [root@VM_0_9_centos shell_learn]# greeting derek Hello derek [root@VM_0_9_centos shell_learn]# greeting alice Hello alice [root@VM_0_9_centos shell_learn]#
2.3.函數的返回值
返回值的方式
方式一:return 方法二:echo
使用return返回值
- 使用return返回值,只能返回1-255的整數
- 函數使用return返回值,通常只是用來供其他地方調用 獲取狀態,因此通常僅返回0或1;0表示成功,1表示失敗
使用echo返回值
- 使用echo可以返回任何字元串結果
- 通常用於返回數據,比如一個字元串值或者列表值
實例一
#!/bin/bash # this_pid=$$ function is_nginx_running { ps -ef |grep nginx |grep -v grep | grep -v $this_pid &> /dev/null if [ $? -eq 0 ];then return else return 1 fi } is_nginx_running && echo "nginx is runnig...." || echo "nginx is stop!"
實例二:獲取用戶列表
#!/bin/bash # function get_users { users=`cat /etc/passwd | cut -d: -f1` echo $users } user_list=`get_users` index=1 for user in $user_list do echo "The $index user is: $user" index=$(($index+1)) done
2.4.局部變數和全局變數
全局變數
- 不做特殊聲明,shell中變數都是全局變數
- 大型腳本程式函數中慎用全局變數
局部變數
- 定義變數時,用local關鍵字
- 函數內和函數外存在相同的變數,函數內部覆蓋函數外部變數
2.5.函數庫
函數庫
- 經常使用的重覆代碼封裝成函數文件
- 一般不直接執行,而是由其它腳本調用
- 庫文件名的尾碼是任意的,但一般使用.lib
- 庫文件通常沒有可執行選項
- 庫文件無需和腳本在同級目錄,只需在腳本中引用時指定