Linux命令行与Shell脚本编程大全(四)

Linux命令行与Shell脚本编程大全(四)

  • 一、创建函数
    • 1.基本的脚本函数
      • 1.1 创建函数
      • 1.2 使用函数
    • 2 返回值
      • 2.1 默认返回值
      • 2.2 使用return 命令
      • 2.3 使用函数输出
    • 3 在函数中使用变量
      • 3.1 向函数传递参数
      • 3.2 在函数中处理变量
        • 1 全局变量
        • 2 局部变量
    • 4 数组变量和函数
      • 4.1 向函数传递数组参数
      • 4.2 从函数返回数组
    • 5 函数递归
    • 6 创建库
    • 7 在命令行上使用函数
      • 7.1 在命令行上创建函数:
      • 7.2 在.bashrc文件中定义函数
  • 二、初始sed和gawk
  • 三、正则表达式
  • 四、sed进阶
  • 五、gawk进阶

一、创建函数

1.基本的脚本函数

1.1 创建函数

function name { commands}

1.2 使用函数

在行中指定函数名就行了

  ## 创建函数,注意函数名和大括号中间有空格,不然会报错
function func1 {
	echo "this is an example of funciton"
}
## 使用函数
func1

2 返回值

2.1 默认返回值

## 函数默认退出状态码,返回函数执行的最后一条命令
func2() {
	echo "trying to display a non-existent file"
	ls -l badfile
}
func2
echo "the exit status is: $?" ##$?为函数默认推出状态码

2.2 使用return 命令

## 使用return命令,需要函数一结束就取返回值,并且返回值必须是0-255
function db1 {
	read -p "Enter a value:" value
	echo "doubling the value"
	return $[ $value * 2 ]
}
db1
echo "the new value is : $?"

2.3 使用函数输出

## 使用函数输出
function db2 {
	read -p "Enter a value: " value1
	echo $[ $value1 * 2 ]
}
result=$(db2)
echo "the new result is $result"

3 在函数中使用变量

3.1 向函数传递参数

## 在函数中使用变量
# 向函数传递参数
function addem {
	if [ $# -eq 0 ] || [ $# -gt 2 ]
	then
		echo -1
	elif [ $# -eq 1 ]
	then
		echo $[ $1 + $1 ]
	else
		echo $[ $1 + $2 ]
	fi
}

echo -n  "Adding 10 and 15 :"
value=$(addem 10 15)  #在脚本内调用函数的方式
echo $value
# 将脚本参数传递给函数 ./test17_3.sh 12 14
function multiply {
	echo $[ $1 * $2 ]
}
if [ $# -eq 2 ]
then 
	value=$(multiply $1 $2) ##手动将脚本变量传递给函数
	echo "$1 multiply $2 is $value"
fi

3.2 在函数中处理变量

1 全局变量

默认情况下,在脚本中定义的任何变量都是全局变量,即使在函数中定义的变量也是全局变量

2 局部变量

在变量声明前加上local关键字即可

local temp=5

4 数组变量和函数

4.1 向函数传递数组参数

  ## 函数变量和数组
function testit {
echo "the parameter are : $@"
thisarray=($(echo "$@"))
echo "The received array is ${thisarray[*]}"
}
myarray=(1 2 3 4 5)
echo "the original array is : ${myarray[*]}"
testit ${myarray[*]}

4.2 从函数返回数组

用echo语句按照正确顺序输出单个数组值。

## 从函数返回数组
function arraydblr {
	local origarray
	local newarray
	local elements
	local i
	origarray=($(echo "$@"))
	newarray=($(echo "$@"))
	elements=$[ $# - 1 ]
	for(( i = 0 ; i <= elements ; i++)){
		newarray[$i]=$[ ${origarray[$i]} * 2 ]
	}
	echo ${newarray[*]}
}
myarray=(1 2 3 4 5)
arg1=$(echo ${myarray[*]})
result=($(arraydblr $arg1))
echo "the new array is : ${result[*]}"

5 函数递归

## 函数递归
function factorial {
if [ $1 -eq 1 ]
then
	echo 1
else
	local temp=$[ $1 -1 ]
	local result=$(factorial $temp)
	echo $[ $result * $1 ]
fi
}
read -p "Enter value :" value1
result=$(factorial $value1)
echo "The factorial of $value1 is : $result"

6 创建库

使用函数库的关键在于source命令,它有一个快捷的别名,称为点操作符,如果使用库文件。

 ## 库文件 myfunc
root@kali:~/Desktop/Scripts# cat myfuncs 
function addem {
 echo $[ $1 + $2 ]
}
function mulem {
 echo $[ $1 * $2 ]
}

function divem {
 if [ $2 -ne 0 ]
 then
 	echo $[ $1 / $2 ]
 else
	echo -1
 fi
}

source ./myfuncs ##引入库文件,也可以是  . /root/Desktop/Scripts/myfuncs
value1=10
value2=5

result1=$(addem $value1 $value2)
result2=$(mulem $value1 $value2)
result3=$(divem $value1 $value2)

echo "$value1 + $value2 = $result1"
echo "$value1 * $value2 = $result2"
echo "$value1 / $value2 = $result3"

7 在命令行上使用函数

7.1 在命令行上创建函数:

1.单行方式:需要在每个命令后面加上分号。
2.多行方式,不需要分号,只需要按下回车就行。

7.2 在.bashrc文件中定义函数

1.直接定义,写在$home/.bashrc文件中。
2.读取函数文件,使用source命令将库文件中的函数添加到.bashrc脚本中。

二、初始sed和gawk

链接: https://blog.csdn.net/ch122633/article/details/77176237

三、正则表达式

链接 : https://www.cnblogs.com/hfutwyy/p/3415577.html

四、sed进阶

链接: https://blog.csdn.net/u010819416/article/details/53942380?locationNum=1&fps=1

五、gawk进阶

链接: https://blog.csdn.net/xiatian6032/article/details/26982031?utm_source=blogxgwz2

你可能感兴趣的:(Linux,shell脚本)