Shell分支与循环
2016-09-06 09:55
225 查看
1、常用的环境变量
特殊的环境变量?:其保存上一个命令执行之后返回给内核的一个整数,我们通常约定,如果一个程序执行成功,则向内核返回0,否则返回非0,这个值的取值是0~255,-128~127。
2、test条件测试命令
(1)数值比较 test $变量 选项 数字
(2)字符串问题 test $变量 选项 字符串
"":这个表示空字符串;
(3)文件问题 test 选项 文件名称
常用的是 test -e 文件名 (判断文件是否存在的);
[] : 也是条件测试命令,[ : 表示的是外部命令,] : 表示的是选项,所以这两个前后必须空格分开;
3、顺序执行
按行顺序执行,与文件内容的书写顺序保持一致;
逐字符扫描和解释的;
4、分支结构
(1)、if分支
if 任意命令 ; then
#若干命令
fi
#其它若干命令
if 任意命令
then
#若干命令
fi
if 任意命令 ; then # 若干命令;fi
if then fi 都属于bash的内部语法命令,进行语法控制。fi的作用是结束if语句块儿;then可以写在if之后,但必须在其前增加分号,将其前面的命令与之隔开,也可以写在if之下。
if 任意命令
then
#若干命令
elif 任意命令
then
#若干命令
fi
if 任意命令
then
#若干命令
else
#若干命令
fi
if的条件判断是通过$?完成的,这是if的内部机理。
(2)、case分支
case分支的作用和结构与C语言的switch...case语句是类似的。
case $变量 in
表达式)
若干语句
;;
表达式)
若干语句
;;
......
esac
case表达式指的是多个常量可以通过或的方式写在一起(使用' | '表示),提供了一个通配符星号,用于表示default语义的case块。
case表达式中所给字符串与变量值是进行相等判断的(字符串相等判断);
5、循环执行
(1)、While
while 任意命令 ; do
#若干命令
done
反单引号:将反单引号中的内容当做命令来执行,然后用该命令的标准输出替换整个反单引号的内容!!!
`echo hello`------->hello
expr是进行各种运算的命令:
while 任意命令
do
#若干命令
done
注意:Shell脚本程序没有do... while循环;
(2)、for
for循环用于遍历一个字符串(按行遍历),这个字符串包括回车换行;
for 遍历名称 in 若干行字符串
do
#若干命令
done
6、特殊情况
(1)、break:跳出break所在当前层的循环;
(2)、当while遇到管道符
命令 | while read 变量名称
do
#若干命令
done
通过以上循环可以将管道符之前的命令产生的标准输出按行遍历,其中变量名称保存的就是某一行的内容。
(3)、当while遇到重定向输入
while read 变量名称
do
#若干命令
done < 文件
就是从文件中一行一行的读取文件内容;
等价于下面的写法:
for 变量名称 in `cat 文件名称`
do
#若干命令
done
变量名称 | 说明 | 示例 |
PATH | 查找所有外部命令的路径集合。 如果没有PATH环境变量,那么执行的所有外部命令都需要说明其文件路径 如果PATH环境变量中所包含及2个以上路径对应同样的同样名称的命令,在执行这个命令时,选选择那个先被找到的文件 | echo $PATH PATH=$PATH:/usr/bin export PATH |
SHELL | 当前默认的SHELL环境(Shell程序) | |
? | 表示上一个命令执行成功或者失败 | |
HOME | 用户主目录 |
2、test条件测试命令
(1)数值比较 test $变量 选项 数字
选项 | 含义 |
-lt | 小于 |
-le | 小于等于 |
-gt | 大于 |
-ge | 大于等于 |
-eq | 判断是否相等 |
"":这个表示空字符串;
选项 | 含义 |
= | 表示相等 |
!= | 不等 |
-z | 为空 |
-nz | 不为空 |
常用的是 test -e 文件名 (判断文件是否存在的);
[] : 也是条件测试命令,[ : 表示的是外部命令,] : 表示的是选项,所以这两个前后必须空格分开;
3、顺序执行
按行顺序执行,与文件内容的书写顺序保持一致;
逐字符扫描和解释的;
4、分支结构
(1)、if分支
if 任意命令 ; then
#若干命令
fi
#其它若干命令
#!/bin/bash read -p "Please Input userAge : " userAge if test $userAge -lt 20 -a $userAge -gt 18 ; then echo "18<userAge<20" fi
if 任意命令
then
#若干命令
fi
#!/bin/bash read -p "Please Input userAge : " userAge if test $userAge -lt 20 -a $userAge -gt 18 then echo "18<userAge<20" fi
if 任意命令 ; then # 若干命令;fi
if [ $userAge -gt 10 -a $userAge -lt 18 ] ; then echo "age too small" ; fi
if then fi 都属于bash的内部语法命令,进行语法控制。fi的作用是结束if语句块儿;then可以写在if之后,但必须在其前增加分号,将其前面的命令与之隔开,也可以写在if之下。
if 任意命令
then
#若干命令
elif 任意命令
then
#若干命令
fi
#!/bin/bash read -p "Please Input userAge : " userAge if test $userAge -lt 20 -a $userAge -gt 18 then echo "18<userAge<20" elif test $userAge -gt 30 then echo "userAge > 30" fi
if 任意命令
then
#若干命令
else
#若干命令
fi
#!/bin/bash read -p "Please Input userAge : " userAge if test $userAge -lt 20 -a $userAge -gt 18 then echo "18<userAge<20" else echo "no range" fi
if的条件判断是通过$?完成的,这是if的内部机理。
(2)、case分支
case分支的作用和结构与C语言的switch...case语句是类似的。
case $变量 in
表达式)
若干语句
;;
表达式)
若干语句
;;
......
esac
case表达式指的是多个常量可以通过或的方式写在一起(使用' | '表示),提供了一个通配符星号,用于表示default语义的case块。
case表达式中所给字符串与变量值是进行相等判断的(字符串相等判断);
#!/bin/bash read -p "Please Input your choose : " choose case $choose in 1|2) echo "choose 1或2" ;; 3) echo "choose 3" ;; *) echo "no choose" ;; esac
5、循环执行
(1)、While
while 任意命令 ; do
#若干命令
done
反单引号:将反单引号中的内容当做命令来执行,然后用该命令的标准输出替换整个反单引号的内容!!!
`echo hello`------->hello
expr是进行各种运算的命令:
#!/bin/bash index=0 while test $index -lt 10 do echo $index index=`expr $index + 1` done
while 任意命令
do
#若干命令
done
注意:Shell脚本程序没有do... while循环;
(2)、for
for循环用于遍历一个字符串(按行遍历),这个字符串包括回车换行;
for 遍历名称 in 若干行字符串
do
#若干命令
done
#!/bin/bash for a in `cat ./abc.txt` #将abc.txt的文件中一行一行内容交给a; do echo $a done
6、特殊情况
(1)、break:跳出break所在当前层的循环;
(2)、当while遇到管道符
命令 | while read 变量名称
do
#若干命令
done
通过以上循环可以将管道符之前的命令产生的标准输出按行遍历,其中变量名称保存的就是某一行的内容。
#!/bin/bash find /usr/include -name "w*.h" | while read filename do cmd=`echo cp $filename ./` #将``中的标准输出给了cmd; $cmd #每次将一个文件拷贝到当前目录下; done #ls -1是竖着打印文件名称
(3)、当while遇到重定向输入
while read 变量名称
do
#若干命令
done < 文件
就是从文件中一行一行的读取文件内容;
#!/bin/bash while read filename do echo $filename done < ./abc.txt
等价于下面的写法:
for 变量名称 in `cat 文件名称`
do
#若干命令
done
相关文章推荐
- shell基础 (输入参数、分支、循环)
- shell基础(输入参数、分支、循环)
- shell脚本1——分支结构、循环、函数
- shell条件-循环-分支-函数
- shell脚本编程学习之路-分支与循环结构
- shell循环和分支
- 3、shellwhile循环,C-for循环,until循环,case分支结构,流程控制语句
- 三、Shell中分支与循环结构
- Shell之分支结构和循环结构
- Shell脚本之for、while循环语句和case分支语句
- shell学习十三--分支与循环
- Shell脚本编程-分支与循环
- shell脚本学习总结09--分支与循环结构
- shell 分支/循环
- shell循环语句
- shell脚本——练习几个脚本_循环和函数
- Linux下shell中的for循环语句
- Linux脚本(shell)编程(六) 循环
- Shell脚本for循环语句简明教程
- T_SQL编程赋值、分支语句、循环