Linux初学者学习笔记

20170829 Shell编程进阶(二)

2017-09-04  本文已影响13人  哈喽别样
  • 函数的基本含义
  • 函数的定义和使用
  • 数组
  • 字符串处理
  • 特殊的处理变量用法

一、函数基本含义:

二、函数的定义与使用详解:

(一)函数的定义:
f_name () {          //第一行输至{回车
>函数体语句           //>是提示符,后面输入函数体语句,回车换行继续输入
>函数体语句
> ......
>}                   //输入}后回车定义本函数完毕
(二)函数的使用
read -p "please type the layer of hannuota: " num 
from="A"
via="B"
to="C"
#第2步的函数实现
move () {
        echo "plate:$1 $2 --> $3"
}
#实现递归函数
hannuota () {
#       echo num:$1 from:$2 via:$3 to:$4
        if [ $1 -eq 1 ]; then
                move $1 $2 $4
        else
#递归过程具体实现
                hannuota $[ $1-1 ] $2 $4 $3
                move $1 $2 $4
                hannuota $[ $1-1 ] $3 $2 $4
        fi  
}
#调用函数
hannuota $num $from $via $to

执行结果如下:

三、数组:

(一)数组的定义:
(二)数组的语法介绍:
(三)数组数据的处理:
1 2 3              1 4 7
4 5 6    ===>      2 5 8
7 8 9              3 6 9

分析发现需要交换的数字其特点在于,两个数字所在位置的行号与列号正好相反。如数字2位于行1列2,而数字4位于行2列1。由此,可以分别采用两次循环操作行号和列号,并交换符合要求的数字。为了防止已经交换的数字再次交换,实际上需要虚幻的数字位于数字1至数字9所连接成的对角线上方数字即可。

代码如下:

#要求用户输入想要N*N的矩阵
read -p "please type the number of matrix: " matrix_num
#从0行0列开始数组编号,所以先对用户输入值自减1
let matrix_num--      
num=1
#定义数组
declare -a matrix   
#从1开始为矩阵赋值   
for i in `seq 0 $matrix_num`; do  
        for j in `seq 0 $matrix_num`; do
                matrix[$i$j]=$num
                let num++
        done
done
#定义函数,实现矩阵打印
func() {
        for p in `seq 0 $matrix_num`; do
                for q in `seq 0 $matrix_num`; do
                        echo -ne  "${matrix[$p$q]}\t"
                done
                echo
        done
}
#调用函数,打印矩阵
func
echo
# 将矩阵转置
for x in `seq 0 $matrix_num`; do
        for y in `seq $x $matrix_num`; do
                if ! [ $x -eq $y ]; then
                        temp=${matrix[$x$y]}
                        matrix[$x$y]=${matrix[$y$x]}
                        matrix[$y$x]=$temp
                fi
        done
done
#再次调用func函数,打印矩阵
func

执行结果如下:

四、字符串处理:

(一)字符串切片:
(二)基于模式取子字符串:

(三)查找替换

(四)查找删除

(五)大小写转换

五、特殊的处理变量用法:

(一)声明为有类型变量:declare 和 typeset,两者等价

语法:
declare [选项] 变量名
-r 声明或显示只读变量
-i 将变量定义为整型数
-a 将变量定义为数组
-A 将变量定义为关联数组
-f 显示此脚本前定义过的所有函数名及其内容
-F 仅显示此脚本前定义过的所有函数名
-x 声明或显示环境变量和函数
-l 声明变量为小写字母
-u 声明变量为大写字母

(二)eval命令:
(三)间接变量引用:
(四)创建临时文件 mktemp命令:
(五)安装复制文件 install命令:
(六)expect命令:
上一篇 下一篇

猜你喜欢

热点阅读