笔记:快速上手shell编程

SHELL学习笔记

变量赋值

# 赋值
A = 10 # 不允许, 赋值时不允许在等号两侧出现空格
A=10 #允许
A= 10 #不允许
A=" 10" #允许

#当赋值时需要填充多个空格,可以使用""

环境变量

[root@localhost gitee]echo $PWD
/usr/local/gitee
# 打印当前目录
[root@localhost gitee]echo $HOME
/root
# 打印家目录

变量作用域

# 定义局部变量A
[root@localhost test]# A=10
[root@localhost test]# echo $A
10

# 编写shell脚本
#!/bin/bash
echo $A

# 执行shell脚本
[root@localhost test]# sh test.sh 

# 因为A的作用域不是全局,因此test.sh无法获取A的值

# 局部变量作用域升级
[root@localhost test]# export A
[root@localhost test]# sh test.sh 
10

特殊变量

$n

  • 作用:执行shell脚本时,传入的参数

  • tip:$0表示脚本名称

  • eg:

    # 编写shell脚本
    #!/bin/bash
    echo $1 $2
    
    # 执行shell脚本
    [root@localhost test]# sh test.sh a b
    a b
    

$#

  • 作用:执行shell脚本时,确定传入的参数个数

  • eg:

    # 编写shell脚本
    #!/bin/bash
    echo "$1 $2"
    echo "$#"
    
    # 执行shell脚本
    [root@localhost test]# sh test.sh a b c
    a b
    3
    # 接受2个参数,但实际传入的是3个
    

$?

  • 作用:判断上一条指令是否成功执行,如果成功执行,返回0;else 返回非0

  • eg:

    [root@localhost test]# sh test.sh a b c
    a b
    3
    [root@localhost test]# echo $?
    0
    # 上一条执行脚本指令成功执行,因此返回0
    
    [root@localhost test]# a = 10
    -bash: a: 未找到命令
    [root@localhost test]# echo $?
    127
    # 上一条执行赋值命令执行失败,因此返回非0
    

$*

  • 获取所有输入的参数

  • eg

    [root@localhost test]# vim test.sh 
      1 #! /bin/bash
      2 echo $*
    [root@localhost test]# sh test.sh 1 2 3
    1 2 3
    

计算

  • 基本语法

    • $((运算式)) | $[运算式]
    • expr + - \* / mod
    • tip: expr的 运算符间 一定要有空格
  • eg

    [root@localhost ~]# expr 1+2
    1+2
    [root@localhost ~]# expr 1 + 2
    3
    [root@localhost ~]# expr 1 + 2 * 4
    expr: 语法错误
    [root@localhost ~]# expr `expr 1 + 2` \* 4
    12
    # expr对于符合运算支持较差
    [root@localhost ~]# echo $[1 + 2 * 4]
    9
    [root@localhost ~]# echo $[1 + 2 \* 4]
    -bash: 1 + 2 \* 4: 语法错误: 无效的算术运算符 (错误符号是 "\* 4"# $[] 不认识 \*
    

条件判断

  • [ contidion ] tip:两端必须有空格

  • 条件

    •   − l t   < ( l e s s   t h a n ) ~-lt~< (less~than)  lt <(less than)
    •   − l e   ≤ ( l e s s   e q u a l ) ~-le~\le (less~equal)  le (less equal)
    •   − e q   = = ( e q u a l ) ~-eq~== (equal)  eq ==(equal)
    •   − g t   > ( g r e a t e r   t h a n ) ~-gt~>(greater~than)  gt >(greater than)
    •   − g t   ≥ ( g r e a t e r   e q u a l ) ~-gt~\ge (greater~equal)  gt (greater equal)
    •   − n e   ≠ ( n o t   e q u a l ) ~-ne~\ne (not~equal)  ne =(not equal)
  • eg

    [root@localhost ~]# [23 -gt 22]
    -bash: [23: 未找到命令
    [root@localhost ~]# [ 23 -gt 22 ]
    [root@localhost ~]# [ 23 -gt 22 ]
    [root@localhost ~]# echo $?
    0
    # 上一条执行结果为真 (命令正常执行(因为为真), 因此返回值为0)
    [root@localhost ~]# [ 23 -lt 22 ]
    [root@localhost ~]# echo $?
    1
    # 上一条执行结果为假 (指令执行不成功(因为为假),因此返回值为1)
    

流程控制

if

  • # 写法1
    if [ condition ]; then #if和条件之间必须空格, 结尾要有; 
    	程序
    fi #结束标志
    
    # 写法2
    if [ condition ]
    	then
    	程序
    fi
    
  • eg

    # 测试脚本
    #!/bin/bash
    if [ 1 -gt 2 ]; then
            echo 'wocao'
    fi
    echo "nima"
    [root@localhost test]# sh test.sh 
    nima
    [root@localhost test]# vim test.sh 
    #!/bin/bash
    if [ 1 -lt 2 ]; then
            echo 'wocao'
    fi
    echo "nima"
    [root@localhost test]# sh test.sh 
    wocao
    nima
    
    #测试脚本
    

case

  • case $变量名 in
    "值1")
    	执行语句
    ;;
    "值2")
    	执行语句
    ;;
    *)
    	功能类似default
    ;;
    esac
    
  • eg

     # 编写的脚本文件
     1 #!/bin/bash
     2 case $# in
     3 1)
     4   echo "牛掰啊,输入了一个变量"
     5 ;;
     6 2)
     7   echo "卧槽,输入了两个变量"
     8 ;;
     9 *)
     10   echo "淦,不许输入超过2个变量"
     11 ;;
     12 esac
     
    [root@localhost test]# sh test.sh 1
    牛掰啊,输入了一个变量
    [root@localhost test]# sh test.sh 1 2
    卧槽,输入了两个变量
    [root@localhost test]# sh test.sh 1 2 3
    淦,不许输入超过2个变量
    [root@localhost test]# sh test.sh 1 2 3 4
    淦,不许输入超过2个变量
    

for

  • for ((i=0; i<=100; ++i))
    do 
    	程序
    done
    
  • eg

    [root@localhost test]# vim test.sh 
      1 #! /bin/bash
      2 sum=0
      3 for ((i=0; i<=100; ++i))
      4 do
      5   # 获取值相加,加法需要运算表达式
      6   sum=$[$sum+$i]
      7 done
      8 echo $sum
    [root@localhost test]# sh test.sh 
    5050
    

你可能感兴趣的:(bash,linux)