Linux(16):Shell编程(3)

vim 编程环境配置:

.vimrc 文件配置如下:(.vimrc文件放到家目录下:/root ;然后退出 xshell 再登陆进来xshell)

set nocompatible 
set history=100
filetype on
filetype plugin on
filetype indent on 
set autoread 
set mouse=c
syntax enable 
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00
set foldenable
set foldmethod=manual
set foldcolumn=0
setlocal foldlevel=3
set foldclose=all           
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set smarttab
set ai  
set si 
set wrap 
set sw=4        
set wildmenu 
set ruler 
set cmdheight=1 
set lz 
set backspace=eol,start,indent 
set whichwrap+=<,>,h,l 
set magic 
set noerrorbells
set novisualbell
set showmatch 
set mat=4 
set hlsearch
set ignorecase
set encoding=utf-8
set fileencodings=utf-8
set termencoding=utf-8
set smartindent
set cin
set showmatch
set guioptions-=T
set guioptions-=m
set vb t_vb=
set laststatus=4
set pastetoggle=<F9>
set background=dark
highlight Search ctermbg=black  ctermfg=white guifg=white guibg=black
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()  
    if expand("%:e") == 'sh'  
        call setline(1, "#!/bin/bash")
        call setline(2, "##############################################################")  
        call setline(3, "# File Name: ".expand("%"))
        call setline(4, "# Version: V1.0")
        call setline(5, "# Author: neo")                        # 作者
        call setline(6, "# Organization: anonymous")            # 公司名
        call setline(7, "# Created Time : ".strftime("%F %T"))
        call setline(8, "# Description:")
        call setline(9, "##############################################################")
    endif  
endfunc 

if结构条件句:

# 1、单分支if条件句语法:
if 条件表达式
then 
    指令    
fi

# 2、双分支if条件句语法:
if 条件表达式
then
    指令
else
    指令
fi
    
# 3、多分支if条件句语法:
if 条件表达式1
then
    指令1
elif 条件表达式2
  then
    指令2
else
    指令3
fi
    
    
# if条件单分支与条件测试编程对比实践:
# 例1:如果不存在 /backup 目录就创建
#!/bin/bash
path="/backup"

[ -d $path ] || mkdir /backup -p

if [ -d $path ]
then 
    :        # shell 中 , : 表示什么都不做
else
    mkdir $path -p
fi 

[ ! -d $path ] && mkdir $path -p

if [ ! -d $path ]
  then
    mkdir $path -p
fi

# 例2:开发shell脚本判断系统剩余内存的大小,如果低于 100MB 就提示内存不足,否则提示内存充足
# 分析: 1)提取系统内存   2) if进行判断
# 获取内存的命令: free -m 
[root@m01 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           474        214        259          0         78         33
-/+ buffers/cache:        102        371                                
Swap:          767          0        767
[root@m01 ~]# 

# linux默认把剩余的内存都当作 buffers/cache 对待,所以上面的 371 就表示剩余的内存(单位是 MB)
# 取出 剩余内存371的方法如下:
[root@m01 ~]# free -m|awk 'NR==3{print $4}'
371
[root@m01 ~]# free -m|awk 'NR==3{print $NF}'        # $NF 表示的最后一个Field(列),即输出最后一个字段的内容
371

# 例题2的示例:
[root@m01 practice]# cat get_memory_size.sh
#!/bin/bash
##############################################################
# File Name: get_memory_size.sh
# Version: V1.0
# Author: neo
# Organization: anonymous
# Created Time : 2019-06-27 23:38:55
# Description:
##############################################################
mem=`free -m|awk 'NR==3{print $NF}'`
if [ $mem -lt 100 ]
then
    echo "memory insufficient"
else
    echo "memory is sufficient"
fi
[root@m01 practice]# bash get_memory_size.sh
memory is sufficient


# 注意: read 读入没办法用 $# 

函数:

函数的概念与作用:

函数的作用就是将程序里多次被调用的相同代码组合起来(函数体),并为其取个名字(即函数名),其它所有想重复调用这部分代码的地方都只
需要调用这个名字就可以了。当需要修改这部分重复代码时,也只需要改变函数体内的一部分代码即可实现所有调用的修改,也可以把函数独立写
到文件里,当需要调用函数时,再加载进来使用。

# shell函数的优势:
1. 把相同的程序段定义成函数,可以减少整个程序的代码量,提升开发效率
2. 增加程序的可读、易读性,提升管理效率
3. 可以实现程序功能模块化,使得程序具备通用性(可移植性)    

# 对于shell来说,Linux系统里面的近2000个命令都可以说是shell的函数

函数的语法:

# 语法1:
function 函数名(){
    指令集
    return 返回值
}

# 语法2:
function 函数名 {        # 这种定义方式时, 函数名 和 {  之间必须要有一个空格
    指令集
    return 返回值
}

# 语法3:(推荐)
函数名(){
    指令集
    return 返回值
}

shell函数的执行:

带参数的函数的执行:

注意: 上图中的第3条表示,$0 依然是脚本的名字,而不是函数所在脚本的名字

猜你喜欢

转载自www.cnblogs.com/neozheng/p/11100578.html
今日推荐