linux shell脚本使用结构化命令

内容:

一.if-then命令

二.if-then-else命令

三.test命令

四.case命令

1.if-then结构化命令中最基本的类型,其格式如下:

1 if command
2 then
3     commands
4 fi

这里需要注意的是在其他语言中if 语句之后的对象是一个等式来测试是TRUE还是FALSE值,而在bash shell中if 语句会运行if 行定义那个命令。如果该命令退出码是数字0,则表示该命令运行成功,位于then 后面的命令就会运行。如果退出码是其他值,那么then后面的命令就不会执行。

1 [email protected]:~> cat test
2 #!/bin/bash
3 #test if-then
4 if ls
5 then
6     echo "ls worked"
7 fi

将第4行ls命令换成bash shell不识别的命令,比如sdjflsdjfl,执行脚本会报错.

1 [email protected]:~> cat test
2 #!/bin/bash
3 #test if-then
4 if sdjflsdjfl
5 then
6     echo "ls worked"
7 fi
8 [email protected]:~> ./test
9 ./test: line 3: sdjflsdjfl: command not found

2.if-then-else,格式如下:

1 if command
2 then
3     commands
4 else
5     commands
6 fi

当if语句中的命令退出码是0时,then部分命令会执行,否则就会执行else部分命令。

2.1嵌套if,当脚本代码中有多个判断条件时,可以用elif 代替else部分,格式如下:

1 if command1
2 then
3     commands
4 elif    command2
5 then
6     commands
7 fi
 1 [email protected]:~> cat test1
 2 #!/bin/bash
 3 if jjj
 4 then
 5     echo "1 worked"
 6 elif lllls
 7 then
 8     echo "2 worked"
 9 elif date
10 then
11     echo "3 worked"
12 fi
13 [email protected]:~> ./test1
14 ./test1: line 2: jjj: command not found
15 ./test1: line 5: lllls: command not found
16 Thu Apr 30 11:41:16 CST 2015
17 3 worked

3.如果test命令中列出的条件成立,test命令就会退出并返回退出码0,如果条件不成立test命令就会退出并返回退出码1。test 命令,格式:

1 test condition

与if-then配合使用

1 if test condition
2 then
3      commands
4 fi

bash shell另一种声明test方法,用方括号[],需要注意[]与condition之间有空格,就是必须在左括号右侧和右括号左侧各加一个空格,否则会报错。

if [ condition ]
then
    commands
fi

3.1使用test进行数值比较

n1 -eq n2              检查n1是否等于n2

n1 -gt n2              检查n1是否大于n2

n1 -ge n2              检查n1是否大于等于n2

n1 -lt n2     检查n1是否小于n2

n1 -le   n2             检查n1是否小于等于n2

n1 -ne  n2             检查n1是否不等于n2

 1 [email protected]:~> cat test2.sh
 2 #!/bin/bash
 3 #using numeric test comparisons
 4 var1=100
 5 var2=11
 6
 7 if [ $var1 -gt 88 ]
 8 then
 9     echo "the value $var1 is greater than 88"
10 fi
11
12 if [ $var1 -gt $var2 ]
13 then
14     echo $var1 ">" $var2
15 else
16     echo $var1"<="$var2
17 fi
18
19 [email protected]:~> ./test2.sh
20 the value 100 is greater than 88
21 100 > 11

3.2 使用test进行字符串比较

str1 = str2 检查str1是否和str2相同

str1 > str2 检查str1是否比str2大

str1 < str2 检查str1是否比str2小

str1 != str2 检查str1是否和str2不同

-n str1    检查str1长度是否非零

-z str1        检查str1长度是否为零

 1 [email protected]:~> cat test3.sh
 2 #!/bin/bash
 3 #testing string
 4
 5 str1=hello
 6 str2=word
 7
 8 if [ -z $str ]
 9 then
10     str=$str2
11     echo $str
12 fi
13
14 if [ $str1 = $str2 ]
15 then
16     echo "str1 = str2"
17 else
18     echo "str1 != str2"
19 fi
20 [email protected]:~> ./test3.sh
21 word
22 str1 != str2

需要注意使用大于号和小于号时候要在其前面使用转义字符 \ .否则可能会报错,或者将大小于号当成重定向。

 1 [email protected]:~> cat test4.sh
 2 #!/bin/bash
 3 #testing string
 4
 5 str1=abcd
 6 str2=abcdef
 7
 8 if [ $str1 \< $str2 ]
 9 then
10     echo "$str1 less than $str2"
11 fi
12 [email protected]:~> ./test4.sh
13 abcd less than abcdef

3.3使用test进行文件比较

 1 -d  file      检查file是否存在并是一个目录
 2 [email protected]:~/testshell> cat testfile.sh
 3 #/bin/bash
 4 #test "-d file"
 5 if [ -d $HOME/testshell ]
 6 then
 7     echo "$HOME/testshell is exists"
 8     cd $HOME/testshell
 9     pwd
10 else
11     echo "$HOME/testshell is not exists"
12 fi
13
14 if [ -d $HOME/nba ]
15 then
16     echo "$HOEM/nba is exists"
17     cd $HOME/nba
18     pwd
19 else
20     echo "$HOME/nba is not exists"
21 fi
22
23 [email protected]:~/testshell> ./testfile.sh
24 /home/oracle/testshell is exists
25 /home/oracle/testshell
26 /home/oracle/nba is not exists

3.4复合条件测试,if-then允许使用布尔逻辑组合测试

[ command1 ] && [ command2 ]

[ command1 ] || [ command2 ]

 1 [email protected]:~/testshell> cat showhello.sh
 2 #/bin/bash
 3 echo "hello world"
 4 [email protected]:~/testshell> cat testfile2.sh
 5 #/bin/bash
 6 #test [ command1 ] && [ command2 ]
 7
 8 if [ -f $HOME/testshell/showhello.sh ] && [ -x $HOME/testshell/showhello.sh ]
 9 then
10     cd $HOME/testshell
11     ./showhello.sh
12 else
13     echo "it is not exists"
14 fi
15
16 [email protected]:~/testshell> ./testfile2.sh
17 hello world

3.5 if-then高级特性双尖括号与双中括号,(( expression ))双尖括号命令允许将高级数学表达式放入比较中,[[ expression ]]双方括号命令提供了针对字符串比较的高级特性。

 1 [email protected]:~/testshell> cat testfile3.sh
 2 #/bin/bash
 3 #using double parenthesis
 4
 5 var1=10
 6 var2=100
 7
 8 if (( ++var1*10 > var2 ))
 9 then
10     echo "$var1*10 is greater $var2"
11 else
12     echo "$var1*10"
13 fi
14
15 if [[ $USER == ora* ]]
16 then
17     echo "hello $USER"
18 else
19     echo "there is no this user"
20 fi
21 [email protected]:~/testshell> ./testfile3.sh
22 11*10 is greater 100
23 hello oracle

4.case命令

case variable in
pattern1 | pattern2 ) commands1 ;;
pattern3) commands2;;
*) default commands;;
esac

 1 [email protected]:~/testshell> cat testcase.sh
 2 #/bin/bash
 3 #using the case command
 4
 5 case $USER in
 6 rich)
 7     echo "hello rich";;
 8 jim)
 9     echo "hello jim";;
10 tom)
11     echo "hello tom";;
12 *)
13     echo "you are no here"
14     echo "user is $USER";;
15 esac
16 [email protected]:~/testshell> ./testcase.sh
17 you are no here
18 user is oracle

时间: 2024-09-30 11:08:59

linux shell脚本使用结构化命令的相关文章

linux shell脚本使用结构化命令(2)

一.for命令 二.while命令 三.until命令 1.for命令基本格式 1 for var in list 2 do 3 commands 4 done 1 [email protected]:~/testshell> cat fortest.sh 2 #!/bin/bash 3 #test for command 4 5 for city in beijing shanghai shenzhen dalian 6 do 7 echo the city is $city 8 done 9

shell脚本编程-结构化命令2-for命令

1.for命令 (1)语法 for val in list; do commands done  list参数提供了一些列用于迭代的值,val值依次赋值为list中的值,知道list轮询结束. commands可以是一条或多条shell命令,echo $val可以查看当前循环的值 (2)读取列表中的值 $cat test #!/bin/bash # basic for command for test in A B C; do echo the next val is $test done $.

shell脚本编程-结构化命令1

1.分支语句 (1)if-then-fi 语句: 格式: if command; then commands fi 当command命令的退出状态码为$?=0时,进入分支,否则继续执行后面的命令. (2) if-then-else-fi 语句: 格式: if command; then commands1 else commands2 fi 当command命令的退出状态码为$?=0时,进入then分支,否则执行else分支命令. (3)if-then-elif-then-fi 语句: 格式:

Shell编程—使用结构化命令

1使用if-then语句 f-then语句有如下格式. if command then commands fi bash shell的if语句会运行if后面的那个命令.如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行.如果该命令的退出状态码是其他值, then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令.fi语句用来表示if-then 语句到此结束. 举例: $ vim test1.sh #!/bin/bash # testing the

Linux Shell脚本编写——使用结构化命令(二)

结构化命令中,最基本的类型就是if-then语句 if command then command fi bash shell的if语句会执行if行定义的那个命令,如果命令的退出状态码是0,则代表成功执行,位于then部分的命令就会执行.如果if行定义的命令的退出状态码是其他,则then部分的命令将不会执行,且if-then语句不能测试跟命令的退出状态码无关的条件 代码2-1 [email protected]:/data# cat demo1 #!/bin/bash if date then e

第八章 shell学习之循环和结构化命令

for循环 1. 列表for循环 for variable in {list}  #有些像C++/CLR中的for each do ... done 如: 1. [[email protected] tmp]# cat b.sh #! /bin/bash for i in 1 2 3 4 5      #1 2 3 4 5等价于{1..5} do echo $i done [[email protected] tmp]# ./b.sh 1 2 3 4 5 2. [[email protected

Linux Shell脚本入门--cut命令

Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [[email protected] ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [[email protected] ~]# cut -c 字符区间 <==用于排列整齐的信息 选项与参数: -d :后面接分隔字符.与 -f 一起使用: -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思: -c :以字符 (

《Linux Shell脚本攻略》 笔记 第二章:常用命令

<Linux Shell脚本攻略> 笔记 第二章:常用命令 1.cat cat -s //多个空白行压缩成一个 cat *.txt | tr -s '\n'   //移除空白行 cat -n //加行号 2.find 沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作. eg: find ./ ! -name "*.txt" -print [[email protected] program_test]# find ./  -type f -name "

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp