Shell脚本的基本知识点整理-1

shell常用指令整理知识点-1

linux 常用命令选项
选项   描述
-a     显示所有对象
-c     生成一个计数
-d     指定一个目录
-e     扩展一个对象
-f     指定输入数据的文件
-h     显示命令的帮助信息
-i     忽略文本大小写
-l     产生输出的长格式版本
-n     使用非交互模式
-o     将所有输出重定向到指定的输出文件
-q     安静模式运行
-r     递归的处理目录和文件 
-s     安静模式运行
-v     生成详细输出
-x     排除某个对象
-y     对所有问题回到yes
if 嵌套命令
    if command1
    then 
      command1 set 1
    elif  command2
    then 
      command2 set 2
    elif command3
    then
      command3 set 3
    fi
demo:
    if [ condition ]
    then
    commands
    fi

test 命令

如果test命令中测试的条件成立,test命令就会退出并返回状态码0。如果条件不成立,则test命令退出并返回非零的状态。
test命令可以用于判断三类条件:
1.数值比较
2.字符串比较
3.文件比较
使用方式

test condition condition是一系列的参数和值。
    if test condition
    then
      commands
    fi
demo:
    #!/bin/bash
    if test
    then 
      echo "No expression return a True"
    else
      echo "No expression a False"
    fi

加入变量内容

  #!/bin/bash
    m_variable="Full"
    if test m_variable
    then 
      echo "No expression return a True"
    else
      echo "No expression a False"
    fi

1、数值比较
数值测试比较
比较 功能描述
n1 -eg n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2

demo:
    #!/bin/bash
    value1=10
    value2=11
    if [ $value1 -gt 5 ]
    then 
      echo "The test value $value1 is greater than 5"
    fi
    
    if [ $value1 -eq $value2 ]
    then
      echo "The values are equal"
    else
      echo "The values are different"
    fi

注意涉及浮点值,数值测试会有一个限制。bash shell只能处理整数。
字符串比较
字符串测试比较
比较 描述
str1 = str2 检查str1是否和str2相等
str1 != str2 检查str1是否和str2不同
str1 <> str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n sstr1 检查str1长度是否非0
-z str1 检查str1长度是否为0
-n 和 -z可以检查一个变量是否含有数据
demo:

#!/bin/bash
  testuser=rich
  if [ $USER = $testuser ]
  then
  echo "Welcom $testuser"
  fi
  if [ $USER != $testuser ]
  then
    echo "This is not $testuser"
  else
    echo "Welcome $testuser"
  fi
demo1:
    #!/bin/bash
    val1=Testing
    val2=testing
    if [ $val1 \> $val2 ]
    then
      echo "$val1 is greater than $val2"
    else
      echo "$val1 is less than $val2"
    fi

文件比较
test文件比较功能
比较 描述
-d file 检查file是否存在并且是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并且是一个文件
-r file 检查file是否存在并且可读
-s file 检查file是否存在并且非空
-w file 检查file是否存在并且可写
-x file 检查file是否存在并且可执行
-0 file 检查file是否存在并且属于当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file2 -ot file2 检查file1是否比file2旧

demo:
    #!/bin/bash
    jump_dir=/home/autochry
    if [ -d $jump_dir ]
    then
      echo "$jump_dir dir  exists"
      cd $jump_dir
      ls -lh
    else
      echo "$jump_dir dir does not exist"
    fi

符合条件测试:

  [ condition1 ] && [ condition2 ]
    [ condition1 ] || [ condition2 ]
    #!/bin/
    
    if [ -d $home ] && [ -w /home/autochry ]
    then
      echo "############"
    else
      echo "************"
    fi

case命令:
格式
case variable in
pattern1 | pattern2) commands1;;
pattern2) commands2;;
*) default commands3;;
esac

demo:

  #!/bin/bash
    
  case "$1" in
    start)
    
        killall brcm_patchram_plus1
        killall bsa_server
        check_not_exist.sh bsa_server
    
        echo 0 > /sys/class/rfkill/rfkill0/state
        sleep 1
        echo 1 > /sys/class/rfkill/rfkill0/state
        sleep 1
    
        echo "|-----  open ------|"
    
            ;;
     stop)
            echo "Stopping broadcom bsa bluetooth server"
            echo "|----- close -----|"
    
            ;;
     *)
            echo "Usage: $0 {start|stop}"
            exit 1
  esac

for 语句
格式:
for var in list
do
commands
done

demo:
    #!/bin/bash
    for test in Alabama Alaska Arizona Arkansas Califonia Colorado
    do
      echo Test next state is $test
    done

特例,需要注意的点:

  #!/bin/bash
    for test in I don't know if this'll work
    do
      echo "Word:$test"
    done
    输出:
    Word:I
    Word:dont know if thisll
    Word:work
    改进:
    #!/bin/bash
    for test in I don't know if "this'll" work
    do
      echo "Word:$test"
    done
    输出:
    Word:I
    Word:don't
    Word:know
    Word:if
    Word:this'll
    Word:work
    变化:
    for test in Nevada "New Hampshire" "New Mexico" "New Work"
    do
      echo "Word:$test"
    done
    输出:
    Word:Nevada
    Word:New Hampshire
    Word:New Mexico
    Word:New Work

从变量读取列表

  #!/bin/bash
    list="New Hampshire New Mexico New Work"
    list=$list" Connecticut"
    echo "${list}"
    for test in $list
    do
      echo "Word:$test"
    done
    输出:
    New Hampshire New Mexico New Work Connecticut
    Word:New
    Word:Hampshire
    Word:New
    Word:Mexico
    Word:New
    Word:Work
    Word:Connecticut

使用通配符读取目录

 #!/bin/bash
    for file in /home/demo/vlc_example/*
    do 
      if [ -d "$file" ]
      then 
        echo "$file is a directory"
      elif [ -f "$file" ]
      then
        echo "$file is a file"
      fi
    done
输出:
    /home/autuchry/vlc_example/mp3_src is a directory
    /home/autuchry/vlc_example/play_contrl is a directory
    /home/autuchry/vlc_example/play_events is a directory
    /home/autuchry/vlc_example/play_list is a directory
    /home/autuchry/vlc_example/play_log is a directory
    /home/autuchry/vlc_example/play_mp3 is a directory
    /home/autuchry/vlc_example/play_thread is a directory
    /home/autuchry/vlc_example/readme.txt is a file
    /home/autuchry/vlc_example/vlc_include is a directory

while 格式


    while test command
    do
    other commands
    done
    示例:
    #!/bin/bash
    var1=10
    while [ $var1 -gt 0 ]
    do
      echo "var1 value: " $var1
      var1=$[ $var1 - 1 ]
    done
    输出:
    var1 value:  10
    var1 value:  9
    var1 value:  8
    var1 value:  7
    var1 value:  6
    var1 value:  5
    var1 value:  4
    var1 value:  3
    var1 value:  2
    var1 value:  1

until命令
until test commands
do
other commands
done
示例:

 #!/bin/bash
    var1=100
    until [ $var1 -eq 0 ]
    do
      echo "var1 value: " $var1
      var1=$[ $var1 - 25 ]
    done

输出:
var1 value: 100
var1 value: 75
var1 value: 50
var1 value: 25

控制循环: break指令 和 continue指令
break n 指定跳出几级循环

 #!/bin/bash
    var1=100
    for var1 in 1 2 3 4 5 6 7 8 9 10
    do
      if [ $var1 -eq 5 ]
      then
        break
      fi 
      echo "var1 value: " $var1
    done
    输出:
    var1 value:  1
    var1 value:  2
    var1 value:  3
    var1 value:  4

continue指令

  #!/bin/bash
    for (( var1 = 1; var1 < 15; var1++ ))
    do
      if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]
      then 
          continue
      fi
      echo "Interation number: $var1"  
    done
输出:
    Interation number: 1
    Interation number: 2
    Interation number: 3
    Interation number: 4
    Interation number: 5
    Interation number: 10
    Interation number: 11
    Interation number: 12
    Interation number: 13
    Interation number: 14
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给大佬递杯卡布奇诺

你们的鼓励就是我传作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值