shell 中的for、while循环及if语句

shell与其他语言一样也支持for、while循环

for循环的一般格式如下:

 1 #!/bin/sh
 2
 3 for 变量 in 列表
 4 do
 5     command 1
 6     command 2
 7     command 1
 8     .........
 9     command n
10 done

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。
列表也可以是一个文件:
in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。

1 #!/bin/sh
2
3 for line in 1 2 3 4 5 6 7
4 do
5     echo "line is $line"
6 done

结果:

[[email protected] 1st]# sh test.sh
line is 1
line is 2
line is 3
line is 4
line is 5
line is 6
line is 7

下面用for循环读一个文件:

查看文件内容

1 [[email protected] 1st]# cat test.txt
2 hello
3 wolrd
4 hello
5 shell
6 [[email protected] 1st]#

code:

1 #!/bin/sh
2
3 FILE=./test.txt
4
5 for line in $(<$FILE)
6 do
7     echo "line is: $line"
8 done

Results:

1 [[email protected] 1st]# sh xx.sh
2 line is: hello
3 line is: wolrd
4 line is: hello
5 line is: shell
6 [[email protected] 1st]# 

while循环的一般格式如下:

1 while command
2 do
3
4    statement
5
6 done

code:

 1 #!/bin/sh
 2
 3 i=0
 4 sum=0
 5 while [ $i -le 100 ]
 6 do
 7    sum=$(($sum + $i))
 8     i=$(($i + 1))
 9 done
10 echo "sum is $sum"

rusults:

1 [[email protected] 1st]# sh xx.sh
2 sum is 5050
3 [[email protected] 1st]#

if语句的一般格式如下:

1 if ....; then
2 ....
3 elif ....; then
4 ....
5 else
6 ....
7 fi

if 条件语句:

文件表达式:

 1 [ -f "somefile" ] :  判断是否是一个文件
 2 [ -x "/bin/ls" ] :    判断/bin/ls是否存在并有可执行权限
 3 [ -n "$var" ] :    判断$var变量是否有值
 4 [ "$a" = "$b" ] :     判断$a和$b是否相等
 5   -r file       用户可读为真
 6  -w file       用户可写为真
 7  -x file       用户可执行为真
 8  -f file       文件为正规文件为真
 9  -d file       文件为目录为真
10  -c file       文件为字符特殊文件为真
11  -b file       文件为块特殊文件为真
12  -s file       文件大小非0时为真
13  -t file       当文件描述符(默认为1)指定的设备为终端时为真

字符串表达式:

[string string_operator string]

这里string_operator可为如下几种:

1 =     两个字符串相等。
2 !=    两个字符串不等。
3 -z    空串。
4 -n    非空串

eg:

1  #!/bin/sh
2
3  NUMS="hello"
4  [ $NUMS = "hello" ]
5
6  echo $?

results:

1 [[email protected] 1st]# sh xx.sh
2 0

整数表达式:

1 -eq   数值相等。
2 -ne   数值不相等。
3 -gt    第一个数大于第二个数。
4 -lt   第一个数小于第二个数。
5 -le   第一个数小于等于第二个数。
6 -ge   第一个数大于等于第二个数。

Eg:

1 #!/bin/sh
2
3 NUMS=130
4 if [ $NUMS -eq "130" ]; then
5
6     echo "equal"
7 else
8     echo "not equal"
9 fi

results:

1 [[email protected] 1st]# sh xx.sh
2 equal

下满贴出一个用shell写的简单图书管理系统:

  1 #!/bin/bash
  2 #Name:Books Management System(BMS)
  3 #Author:DREAM
  4 file=books.txt
  5 function information
  6 {
  7     echo "Books Management System(BMS)"
  8     echo "---------------------------"
  9     echo -e "  1: ADD      Books"
 10     echo -e "  2: Show     Books"
 11     echo -e "  3: Select   Books"
 12     echo -e "  4: Delete   Books"
 13     echo -e "  5: Exit     System"
 14     #echo
 15     echo "---------------------------"
 16     read -p "please input your choice:" num
 17     echo
 18
 19     case "$num" in
 20         1) Add
 21         ;;
 22         2) Show
 23         ;;
 24         3) Select
 25         ;;
 26         4) Delete
 27         ;;
 28         5) exit
 29         ;;
 30         *) information
 31         ;;
 32     esac
 33 }
 34
 35 function Add
 36 {
 37     echo -e "please books information eg:(English    101    Jerry)"
 38     echo
 39     read -p "please input books name: " books_name
 40     read -p "please input books number: " books_num
 41     read -p "please input books author: " books_author
 42
 43     echo -e "$books_name\t$books_num\t$books_author" >>$file && {
 44         echo "Add Books success"
 45         echo "---------------------------"
 46     }
 47     if [ $? -ne 0 ]
 48     then
 49         echo "Add Books failure"
 50     fi
 51
 52     information
 53 }
 54
 55 function Show
 56 {
 57     echo -e "Bname\tBnum\tBauthor"
 58     grep -Ev "^$" $file
 59     echo "-----------------------"
 60     echo
 61     information
 62 }
 63
 64 function Search_menu
 65 {
 66     echo "-----------------------"
 67     echo -e "  1: Search By Bname"
 68     echo -e "  2: Search By Bnum"
 69     echo -e "  3: Search By Bauthor"
 70     echo -e "  4: Eixt Search System"
 71     echo
 72     echo "-----------------------"
 73 }
 74
 75 function Select
 76 {
 77     Search_menu
 78     read -p "please input your choice:" ch
 79     case "$ch"  in
 80     1)
 81         read -p "please input books name: " name
 82         echo -e "Bname\tBnum\tBauthor\n-------------------------"
 83         awk ‘{if($1~/^‘$name‘/) print $0}‘ $file
 84         echo "-------------------------"
 85         if [ $? -ne 0 ]
 86         then
 87             echo "the file no exist"
 88         fi
 89     ;;
 90     2)
 91         read -p "please input books number: " num
 92         echo -e "Bname\tBnum\tBauthor\n-------------------------"
 93         awk -v s=$num ‘$2==s {print $0}‘ $file 2>/dev/null
 94         echo "-------------------------"
 95         if [ $? -ne 0 ]
 96         then
 97             echo "the file no exist"
 98         fi
 99         echo $?
100     ;;
101     3)
102         read -p "please input books author: " author
103         echo -e "Bname\tBnum\tBauthor\n-------------------------"
104         awk ‘{if($3~/‘$author‘/) print $0}‘ $file
105         echo "-------------------------"
106         if [ $? -ne 0 ]
107         then
108             echo "the file no exist"
109         fi
110         echo $?
111
112     ;;
113     4) exit
114     ;;
115     *) Select
116     ;;
117     esac
118     echo
119     information
120 }
121
122 function Delete
123 {
124     read -p "please input your want delete boos number:" num
125     sed -i "/$num/d" $file
126
127     if [ $? -ne 0 ]
128     then
129         echo "success failure"
130     fi
131
132     information
133 }
134
135 information

  

时间: 2024-11-05 11:10:14

shell 中的for、while循环及if语句的相关文章

(九)shell中case语句、程序传参、while

2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同.shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break). 2.2.6.2.调用shell程序的传参(1)C语言中可以通过main函数的argc和argv给程序传参(详情参考<4.

bash shell中测试命令

bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径.如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 .这样if-than语句就与其他编程语言中的if-than语句类似的方式工作了.如果条件不成立,test命令就会退出并返回非零的退出状态码,使得if-than语句不会被执行. 1    test 命令的基本格式     test        condition         condition是test命令要测试的一系列参数和值.

shell中使用while循环ssh的注意事项

需要读取一个文本,次文本每一行包含一个IP在while循环中使用ssh,但ssh完第一行后就退出了,如何避免自动读取一行就跳出while循环,此文将详细解释其原因.      最近在写一个自动更新的shell,可是发现如果在使用while循环从一个文件中读取ip地址,然后访问就只能读取第一行纪录.代码如下: while read LINE do echo *******************************************$LINE ssh 192.168.10.233 ls

shell中for循环总结

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 1. for((i=1;i<=10;i++));do echo $(expr $i \* 4);done2.在shell中常用的是 for i in $(seq 10)3.for i in `ls` 4.for i in ${arr[@]}5.for i in $* ; do6.for File in /proc/sys/net/ipv4/confacc

Shell中的循环语句实例

1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do     echo number $x done 注:"for" 循环总是接收 "in" 语句之后的某种类型的字列表.在本例中,指定了四个英语单词,但是字列表也可以引用磁盘上的文件,甚至文件通配符.实例1.2 #!/bin/bash for x in /var/log/* do     #echo "$x is a file

(八)shell中的循环结构

1.for循环(1)要求:能看懂.能改即可.不要求能够完全不参考写出来.因为毕竟嵌入式并不需要完全重新手写shell,系统管理员(服务器运维人员,应用层系统级管理开发的才需要完全掌握shell) 这里将1 2 3 4 5依次打印出来 打印出当前目录文件 2.while循环(1)和C语言的循环在逻辑上无差别(2)要注意很多格式要求,譬如:while后面的[]两边都有空格,[]后面有分号分号(如果do放在一行的话),i++的写法中有两层括号. 3.echo的创建和追加输入文件(1)在shell中可以

shell中使用while循环ssh时只循环第一行的问题解决

最近在写一个shell脚本,本想使用for循环来读取文件里面的内容,可是发现文件里每一行都有空格的,明显用for循环行不通过,我的目的是想一行一行读取文件内容,于是果断使用while循环来实现,可问题来了,当ssh完第一行后就退出了,后面都没有执行成功,如何避免自动读取一行就跳出while循环,此文将详细解释其原因. 文件内容如下:[[email protected]_hai~]#cat 2.txt scjz 2144 10.16.100.113  89scjz 2144 10.16.100.1

shell中for循环

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 1. for((i=1;i<=10;i++));do echo $(expr $i \* 4);done2.在shell中常用的是 for i in $(seq 10)3.for i in `ls` 4.for i in ${arr[@]}5.for i in $* ; do6.for File in /proc/sys/net/ipv4/confacc

三、Shell中分支与循环结构

if结构的语法格式 单分支结构 if <条件表达式>   then     指令 fi if <条件表达式>; then     指令 fi 双分支结构 if <条件表达式>; then     指令1 else     指令2 fi 多分支结构 if <条件表达式>; then     指令1 elif     指令2 elif     指令3 fi shell中的函数   shell函数是shell脚本中由命令集和语句组成的代码块,这个代码块可以被其他脚

shell中while循环引用ssh命令的坑

原理shell代码如下: #!/bin/sh cat ../androidsrc | while read line do         ip=$(echo $line | awk '{print $1}')         srcdir=$(echo $line | awk '{print $2}')         destdir=$(echo $line | awk '{print $3}')         user=$(echo $line | awk '{print $4}')