shell学习笔记---(语法篇三)

· 位置参数和特殊变量
. shift命令
. 函数
. 函数返回值
. 函数执行成功与否判断
. 命令行参数遍历
. shell脚本的调试方法

# 位置参数和特殊变量                                      
# $0:相当于C语言main函数中的argv[0]还有$1,$2...           
# 这些称为位置参数,相当于C语言中的argv[1],argv[2]...     
# $#:相当于C语言中main函数中的argc-1                      
# $@:表示参数列表$1,$2...,可以用在for循环中的in后面       
# $?:上一条命令的退出码                                   
# $$:当前shell的进程号                                   
echo "\$0 -> $0"                                        
echo "\$1 -> $1"                                        
echo "\$2 -> $2"                                        
echo "\$3 -> $3"                                        
echo "\$# -> $#"                                        
echo "\$@ -> $@"                                        
echo "\$? -> $?"                                        
# shift位置参数可以用shift命令左移                        
# 比如shift 3表示原来的$4现在变成$1                       
# 原来的$5变成$2等,原来的$1,$2,$3丢弃,$0不移动          
# 不带参数的shift命令相当于shift 1                        
shift 2                                                 
echo "\$0 -> $0"                                        
echo "\$1 -> $1"                                        
echo "\$2 -> $2"                                        
echo "\$3 -> $3"                                        
echo "\$# -> $#"                                        
echo "\$@ -> $@"                                        
echo "\$? -> $?"                                        
# 如何遍历命令行参数                                      
# 方法1                                                   
for i in $@                                             
do                                                      
    echo $i                                             
done                                                    
# 方法2                                                   
while [ $# -ne 0 ]                                      
do                                                      
    echo $1                                             
    shift 1                                             
done                                                    

# 函数,函数定义中没有返回值也没有参数列表                
function myfun()                                        
{                                                       
    echo "hello world"                                  
}                                                       
myfun   #调用函数                                       
# shell中的函数必须先定义才能调用                         
# 函数传参,传参时将shell函数当成迷你脚本                 
# shell函数没有参数列表并不表示不能传参数                 
# 事实上函数就像是迷你脚本,调用函数时可以传任一个参数    
# 在函数内同样是用$1,$2等变量来提取参数                   
function myfun()                                        
{                                                       
    echo $0                                             
    echo $1                                             
    echo $2                                             
    echo $#                                             
    echo $@                                             
    echo "hello world"                                  
}                                                       
myfun arg1 arg2                                         
# $0并不会作为函数参数进行传参任务                        
# 函数中的位置参数相当于函数的局部变量                    
# 改变这些变量并不会影响函数外面的$1,$2等变量             

# 函数返回值                                              
# 函数调用或者返回时,将shell函数当成命令                 
# 只要是命令,那么函数调用成功与否,可以通过$?判定        
# 一般函数中可以用return命令返回,如果return后面          
# 跟一个数字则表示函数的退出码                            
function myfun()                                        
{                                                       
    echo "exec some code"                               
    return 123                                          
}                                                       
myfun                                                   
echo $?                                                 
# 如何判断函数执行是否正确?                              
# 方式1                                                   
function myfun()                                        
{                                                       
    echo "exec some code"                               
    return 123                                          
}                                                       
myfun                                                   
if [ $? -eq 123 ];then                                  
    echo "exec success"                                 
else                                                    
    echo "exec false"                                   
fi                                                      
# if条件认为0为真,非0为假                                
# if条件判断是根据命令的退出码判断的                      
# 方式2                                                   
function myfun()                                        
{                                                       
    echo "hello world"                                  
    return 0                                            
}                                                       
if myfun;then                                           
    echo "exec success"                                 
else                                                    
    echo "exec false"                                   
fi                                                      
# 方式3                                                   
# echo方式,不关心函数的退出码而关心他的数据              
function myfun()                                        
{                                                       
    echo "success"                                      
}                                                       
ret=$(myfun)                                            
if [ "X$ret" == "Xsuccess" ];then                       
    echo "exec success"                                 
fi                                                      

# shell脚本的调试方法:通过调试选项进行                   
# -n:读一遍脚本中的命令但不执行                           
# -v:一边执行脚本一边将执行过的脚本命令打印到标准错误输出 
# -x:提供跟踪执行信息,将执行的每一条命令和结果依次打印出 
# 使用这些选项的三种方法                                  
# 方法1:命令行使用                                       
echo "haha1"                                            
echo "haha2"                                            
echo "haha3"                                            
myint=90                                                
if [$myint -lt 100];then  # 错误语句                    
    echo "yes"                                          
fi                                                      
# 方法2:在脚本开头提供参数 #! /bin/sh -x                 
! /bin/sh -x                                            
echo "haha1"                                            
echo "haha2"                                            
echo "haha3"                                            
myint=90                                                
if [$myint -lt 100];then  # 错误语句                    
    echo "yes"                                          
fi                                                      
# 方法3:在脚本中用set命令启用或禁用参数                  
# set -x和set +x 分别表示开启和禁用-x参数,               
# 这样就可以只对脚本中的某一段进行跟踪调试                
echo "haha1"                                            
echo "haha2"                                            
set +x                                                  
echo "haha3"                                            
echo "haha4"                                            
echo "haha5"                                            
set -x                                                  
echo "haha6"                                            
echo "haha7" 

猜你喜欢

转载自blog.csdn.net/qq_40927789/article/details/80699726