shell编程流程控制语句 if for while until用法

# 当在一行上有多个操作时,需要用命令分割符 分号 ; 隔开,比如 echo a; echo b
# 分号是用来隔断每个语法关键字或命令

# if 用法

#!/bin/bash
if [ 1 = 1 ] # 注意空格不能少,少了就报错 1=1是赋值 1 = 1 是比较 而且中括号跟表达式之间也有空格,少了也报错
then
 echo true
else
 echo false
fi

# 也可以这样表示

#!/bin/bash
if [ 1 = 1 ]; then
 echo true; echo correct
else
 echo false; echo incorrect
fi

# 也可以全部扔到一行上 风格太丑,不用

#!/bin/bash
if [ 1 = 1 ]; then echo true; echo correct; else echo false; echo incorrect; fi

其实[] 就是test 命令的简写方式

# for循环需要两层括号

#!/bin/bash
for((i=1;i<=10;i++))
do
 echo $i
done

# 或者这样 do放到一行上

#!/bin/bash
for((i=1;i<=10;i++)); do
 echo $i
done

# for in 用法

#!/bin/bash
for i in 'ab bbb' b c; do # 不需要括号包起来,不需要逗号隔开,用空格分隔 带空格的字符串用单/双引号引起来
 echo $i
done

# while 用法

#!/bin/bash
i=10
while [[ $i -gt 5 ]]; do # [[]] 是正确判断条件写法 上面提到过[]是test的简写
 echo $i
 ((i--))
done

# until 用法
# 意思是当条件满足就退出,否则就执行语句, 感觉比较另类

#!/bin/bash
i=10
until [[ i -lt 0 ]]; do
 echo $i
 ((i--))
done

# case 用法

#!/bin/bash
read i

case $i in
 a)
 echo it is a
 ;;

 b)
 echo it is b
 ;;

 c)
 echo it is c
 ;;

 d|e)
 echo it is d or e
 ;;

 [fgh])
 echo it is f or g or h
 ;;

 [i-l])
 echo it is i-l
 ;;

 ?)
 echo it is single unit
 ;;

 *)
 echo other
esac

# * 任意字串, ? 任意单个字符, [abc] a, b, 或c三字元其中之一, [a-n] 从a到n的任一字元 ,| 多重选择 或者的意思

# select 用法
# select 一般和case配合使用,会出现一个菜单,提示选择前面的数字,而且如果没有退出的话,会继续提示选择,如图。

#!/bin/bash
select i in a b c
do
case $i in
 a)
 echo aaa
 exit
 ;;

 b)
 echo bbb
 ;;

 c)
 echo ccc
 ;;

 *)
 echo other
 ;;
esac
done

关于shell中read命令接收多个参数

比如需求为:用 read 接收输入的两个参数,做为用户名和密码,用一句实现。

实现方法:

#!/bin/bash
stty erase ^h
read -p "请输入用户名密码,空格隔开: " username password
echo $username
echo $password

运行结果:

 

 

 

把第一个输入赋值给 username 变量,空格后面的输入赋值给 password 变量。

如果在输入内容时,输入错误,用退格键删除时,会显示^H,删不掉错误的内容,如图:

 

 

解决方法就是在脚本顶部上加
stty erase ^h  这行代码(上面脚本已经加了,演示图中的脚本没加),就可以实现退格删除,另一种方法就是按着 ctrl+退格 删除。