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. node.js 从文件流中读写数据及管道流

    读取数据 // 引入 fs 模块 const fs = require('fs'); // 创建可读流 let readStream = fs.createReadStream('index.txt' ...

  2. k8s 资源管理

    对应到Kubernetes的Pod容器上,就是下面这4个参数:◎ spec.container[].resources.requests.cpu:◎ spec.container[].resource ...

  3. html select美化模拟jquery插件select2.js

    代码展示:http://www.51xuediannao.com/demo.php 代码说明: select2.js是一个html select美化模拟类jquery插件,但是select2.js又远 ...

  4. Webpack4篇

    [Webpack4篇] webpack4 打包优化策略 当前依赖包的版本 1 优化loader配置 1.1 缩小文件匹配范围(include/exclude) 通过排除node_modules下的文件 ...

  5. 不在B中的A的子串数量 HDU - 4416 (后缀自动机模板题目)

    题目: 给定一个字符串a,又给定一系列b字符串,求字符串a的子串不在b中出现的个数. 题解: 先将所有的查询串放入后缀自动机(每次将sam.last=1)(算出所有子串个数) 然后将母串放入后缀自动机 ...

  6. curl直接作为http的客户端?也是醉了

  7. ES6模块化使用遇到的问题

    前言 最近在学习ES6模块化时,遇到了一些问题,通过查询相关资料得以解决,本篇随笔详细记录了解决方法. 具体内容 以下定义一个模块common.js 在test.html中引入上述定义的模块 运行上述 ...

  8. selenium 操作键盘事件

    一.key包提供按键方法 使用必须先引用key包:from selenium.webdriver.common.keys import Keys 键盘事件,在现实操作中我们习惯性的按tab见切换到写一 ...

  9. python编程语言学习day02

    格式化输出 (1)info 格式 (2)%字符串占位 %s 表示字符串占位 %d 表示整数占位 %f 表示浮点数占位 中间的%     之后是所需要输入的值 多个占位, %  之后用()括号括起    ...

  10. Jmeter-【beanshell处理器】-随机获取手机号

    一.通过操作变量 二.引用外部Java文件 三.引用外部class文件