Shell 学习(三)

流程控制

1 if判断

  • 基本语法
if [ 条件判断式 ];then
程序
fi 或者 if[ 条件判断式 ]
then
程序
elif[ 条件判断式 ]
then
程序
fi

注意事项:(1) [ 条件判断式 ],中括号和条件判断式之间必须要有空格。(2) 推荐使用第二种方式

  • 应用实例

案例: 编写一个shell程序,请输入参数,大于等于60,则输出“及格了”,如果小于60,则输出“不及格”

#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格了"
elif[ $1 -lt 60]
then
echo "不及格"
fi

2 case 语句

  • 基本语法

这个case语法很不一样,我开始很不习惯,有点像C的感觉

case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
···省略其他分支···
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
  • 应用实例

案例:当命令行参数是1时,输出“周一”,当参数是2时,输出“周二”,其他情况输出other。

#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

3 for循环

  • 基本语法1
for 变量 in 值1 值2 值3 ..
do
程序
done

应用实例

打印命令行输入的参数[会使用到$* 和$@]

#!/bin/bash
#使用$*
for i in "$*"
do
echo "the num is $i"
done echo "====="
#使用$@
for j in "$@"
do
echo "the num is $j"
done

执行后为这样:

  • 基本语法2

    这个语法就很像java中的for循环

for((初始值;循环控制条件;变量变化))
do
程序
done

应用实例:从1加到100的值输出显示

但是这个很奇怪,前面判断条件都是用-gt -ge 来着。这里可以直接用<=

#!/bin/bash
#定义一个变量
SUM=0
for((i=0;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"

4 while 循环

  • 基本语法
while [ 条件判断式 ]
do
程序
done

应用实例

案例:从命令行输入一个数n,统计从1+...+n 的值是多少

#!/bin/bash
SUM=0
i=0
while [$i -le $1]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"

2 read 读取控制台输入

2.1 基本语法

read (选项)(参数)
选项:
-p : 指定读取值时的提示符
-t : 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。
参数:
变量:指定读取参数的变量名

2.2 应用实例

案例一:读取控制台输入一个num 值

案例二:读取控制台输入一个num值,在10秒内输入

#!/bin/bash
read -p "请输入一个数num1="NUM1
echo "你输入的值是num1=$NUM1"
read -t 10 -p "请输入一个数num2="NUM2
echo "你输入的值是num2=$NUM2"

3 函数

3.1 系统函数

  • basename 基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename[pathname][suffix]
basename[string][suffix](功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来)。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
  • dirname 基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录的部分))

3.2 应用实例

  • 案例1:请返回 /home/aaa/test.txt 的“test.txt” 部分

  • 案例2:请返回 /home/aaa/test.txt 的/home/aaa

3.3 自定义函数

  • 基本语法
[function] funname[()]
{
Action;
[return int;]
}

调用直接写函数名 : funname[值]

  • 应用实例
  • 案例1:计算输入两个参数的和(read),getSum
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2 #调用getSum
getSum $n1 $n2

Shell 学习(三)的更多相关文章

  1. shell学习三十七天----引用

    引用 案例,假设我想输出一个星号(*),使用echo怎样做? echo * 这是肯定不行的,须要将*转移,即:echo \* 这样就引出了引用的概念.所为引用,是用来防止shell将某些你想要的东西解 ...

  2. linux shell学习三

    Shell for循环 Shell for循环的语法如下所示 for 变量 in 列表 do command1 command2 ... commandN done 举例: ..} do echo $ ...

  3. shell学习三十八天----运行顺序和eval

    运行顺序和eval shell从标准输入或脚本中读取的每一行称为管道,它包括了一个或多个命令,这些命令被一个或多个管道字符(|)隔开. 其实嗨哟非常多特殊符号可用来切割单个的命令:分号(;),管道(| ...

  4. shell学习三十四天----printf详解

    http://blog.csdn.net/shanyongxu/article/details/46744055

  5. SHELL学习笔记三

    SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...

  6. Shell学习之环境变量配置文件(三)

    Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...

  7. Shell—学习之心得

    由于项目要招聘需要有经验shell开发人员(awk编程),而作为技术面试官(暂时)的我对shell编程不太熟:当然以前也写过一些shell脚本来满足项目的需求—备份环境,数据库(逻辑).假如只是针对a ...

  8. shell学习总结之自定义函数

    shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...

  9. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

随机推荐

  1. C++——extern

    1.当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应 ...

  2. 9、TestNG介绍与安装

    介绍 TestNG是一个受JUnit和NUnit启发的测试框架,但引入了一些新功能,使其更加强大和易于使用,例如: 注释. 在任意大的线程池中运行你的测试,这些线程池有各种可用的策略(所有方法在他们自 ...

  3. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决

    这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据 ...

  4. vbs 之 excel 使用VBScript 操作excel

    打开excel及新建工作薄 '' 2. Method ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 2.1 CreateO ...

  5. pair的用法

    如何定义?(初始化) 1. pair<int,int>p; 2.定义即初始化,也可以这个样子 pair<,); 里面的类型还可以是string,double等. 3.还可以这样子初始 ...

  6. Java目录事件

    当文件系统中的对象被修改时,我们可以监听watch服务以获取警报.java.nio.file包中的以下类和接口提供watch服务. Watchable接口 WatchService接口 WatchKe ...

  7. java.lang.Boolean.compareTo()方法实例

    compareTo接口 Comparable<Boolean>指定以下接口 参数 b - 布尔实例进行比较 返回值 方法返回 0 - 如果该对象表示相同的布尔值作为参数 一个正数值 - 如 ...

  8. 使用ProxyBroker构建代理池

    import asyncio from proxybroker import Broker async def show(proxies): while True: proxy = await pro ...

  9. 使用cpanel后台的“时钟守护作业”功能完成空间的定时全备份

    现在不少虚拟主机都是使用的cpanel控制面板,由于空间商选用的cpanel版本不同,有的带有定时备份功能,而有的就没有这项功能,需要手动备份.不过,还在绝大部分的cpanel后台都有“时钟守护作业” ...

  10. C++与JAVA语言区别

            转载自:http://www.cnblogs.com/cnryb/archive/2011/01/04/2004141.html "作为一名C++程序员,我们早已掌握了面向对 ...