码迷,mamicode.com
首页 > 系统相关 > 详细

Linux(四) 使用结构化命令

时间:2020-05-22 17:27:54      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:用户名   字符   状态码   mic   函数   方法   相等   name   数字   

  • if-then
if command
then
  commands
fi

  bash shell中的if语句运行在if行定义的命令. 如果命令突出状态时0, 将执行then后面的命令. 如果命令的退出状态时0以外的其他值,那么then后面的命令将不会执行.#!/bin/bash

# testing the if statement
if date
  echo "it worked"
fi
echo "we‘re outside of the if statement"
# 输出: it worked ; we‘re outside of the if statement

  if语句行使用 grep 命令搜索/etc/passwd文件,查看系统是否正在使用一个特定的用户名.如果一个用户拥有该登录名,脚本会显示一些文本,然后列出用户HOME目录下的bash文件. 如果变量testuser设置成系统中不存在的一个用户,什么都不会列出

#!/bin/bash
# testing multiple commands in the then section
testuser=root
if grep $testuser /etc/passwd
then
    echo The bash file for user $testuser are:
    ls -a /home/testuser/.b*
fi

 

  • if-then-else
if command
then
  commands
else
  commands
fi

  如果 if 语句行的命令返回的状态码为0, 就会执行在 then 部分列出的命令, 就像在普通的 if-then 语句中一样.如果if语句行的命令返回非零退出状态码,bash shell 将会执行 else 部分的命令

#!/bin/bash
# testing the else section
testuser=badtest
if grep $testuser /etc/passwd
then
  echo The files for user $testuser are:
  ls -a /home/$testuser/.b*
else
  echo "The user name $testuser doesn‘t exxist on this system"
fi

输出: The user name badtest doesn‘t exist on this system

 

  • 嵌套 if 语句
if command1
then
  commed2
elif commed2
then
  more commands
elif commed3
then
  more commands
fi

  elif语句行提供另一条要评估的命令,与原始的if语句行相似. 如果elif命令返回的退出状态码为 0, bash 执行第二个then语句部分的命令

  命令块的执行依赖于哪条命令返回的退出状态码为0. bash shell 会按顺序执行 if  语句, 只有第一个返回0退出状态的命令会导致then部分命令被执行.

 

  • test

  提供一种检测 if-then 语句中不同条件的方法. 如果 test 命令中列出的条件评估值为 true, test 命令以0 退出状态码退出, 这使 if-then语句使用与其他编程语言中的 if-then 语句一样的方法运行. 如果条件为 false, 则 test 命令退出, 使得 if-then语句失败

test condition

# condition是一系列test命令评估的参数和值. 在if-then语句中使用时, test命令如下所示
if test condition
then 
    commands
fi

# bash shell 提供一种在 if-then 语句中声明 test 命令的另一种方法:
if [ condition ]
then
    commands
fi
# 方括号定义在test命令中使用的条件. 
# 注意, 在前半个方括号的后面和后半个方括号的前面必须都有一个空格,否则会得到错误信息 # test命令能评估一下3类条件:
1.数值比较, 2.字符串比较, 3.文件比较

    1) 数值比较

    技术图片

#!/bin/bash
# using numeric test comparisons
var1=10
var2=11

if [ $var -gt 5 ]
then
    echo "The test value $val1 is greater than 5"
fi

if [ $val1 -eq $val2 ]
then
    echo "The values are equal"
else
    echo "The values are different"
fi

# 第一个测试条件: if [ $val1 -ft 5 ]  测试变量 val1 的值是否大于5
# 第二个 test 条件: if [ $val1 -eq $val2 ] 测试变量val1的值是否等于变量val2的值
# 输出: The test value 10 is greater than 5 ; The values are different

# -----------------------------------------------------------------------
#!/bin/bash
# testing floating point numbers
val1=` echo "scale=4; 10 / 3 " | bc`
echo "The test value is $val1"
if [ $val1 -gt 3 ]
then
  echo "The result is larger than 3"
fi

# 输出: The test value is 3.333 ; [: 3.333: integer expression expected

     当使用 bash 计算器来生成一个浮点值, 并将它存储在变量 val1 中, bash shell 将无法处理成功.

    bash shell 只能处理整数数字, 在面向数值函数(如数值测试条件)中不起作用. 

    2) 字符串比较

    技术图片

# 1.字符串相等 ( 比较字符串是否相等时, 测试比较将所有标点符号和大写都考虑在内 )
#!/bin/bash
# testing string equality
testuser=rich
if [ $USER = $testuser ]
then
    echo "Welome $testuser"
else
    echo "This isn‘t $testuser"
fi

# rich 登录 输出: Welcome rich
# baduser登录 输出: This isnt baduser

# ----------------------------------
# 2.字符串顺序
# 问题: 1.大于和小于符号一定要转义, 否则shell会将他们当作重定向符号,将字符串值看作文件名; 2.大于和小于顺序与在 sort 命令中的顺序不同
#!/bin/bash
# mis-using string comparisons

val1=baseball
val2=hockey
if [ $val1 > $val2 ]
then
    echo "$val1 is greater than $val2"
else
    echo "$val1 is less than $val2"
fi

# baseball is greater than hockey 
# 同时当前目录下生成了一个名为 hockey 的文件
# 脚本将大于号理解为输出重定向,所以创建了一个 hockey 文件. 由于重定向成功完成,所以测试命令返回突出状态代码 0 , if 语句认为事情已成功完成. 要解决这个问题,需要适当转义大于号
# 当字符串中存在大小写字母时, test命令使用标准的 ASCII 排序

#-------------------------------------------------------
# 3.字符串大小
#!/bin/bash
# testing string length
val1=testing
val2=‘‘

if [ -n $val1 ]
then
    echo "The string ‘$vall‘ is not empty"
else
    echo "The string ‘$val1‘ is empty"
fi

if [ -z $val2 ]
then
    echo "The string ‘$val2‘ is empty"
else
    echo "The string ‘val2‘ is not empty"
fi

if [ -z $val3 ]
then 
    echo "The string ‘$val3‘ is empty"
else
    echo "The string ‘$val3‘ is not empty"
fi

# 输出: The string testing is not empty ; The string ‘‘ is empty ; The string ‘‘ is empty
# if [ -n $val1 ] 确定变量val1的长度是否为非零值,如果是非零值,那么将处理then部分
# if [ -z $val2 ] 确定变量val2的长度是否为0,,如果是0, 那么将处理then部分;
# if [ -z $val3 ] 确定变量val3的长度是否为0,未定义,所以长度为零

    警告: 空变量和没有初始化的变量可能会对shell脚本测试产生灾难性的影响.如果不确定变量的内容, 在数值比较或者字符串比较中使用它之前, 最好使用 -n 后者 -z 测试一下它是否有值

    3) 文件比较

    test命令能够测试Linux文件系统上的文件状态和路径

    技术图片

 

     技术图片

 

     

 

Linux(四) 使用结构化命令

标签:用户名   字符   状态码   mic   函数   方法   相等   name   数字   

原文地址:https://www.cnblogs.com/lab-zj/p/12937932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!