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. 第十五章 例行性工作(crontab)--循环执行的例行性工作调度 crontab(定时任务)

    循环执行的例行性工作调度 crontab(定时任务) 15.1 例行性工作调度 不考虑硬件与服务器的链接状态,Linux帮助提醒很多任务. Linux例行性工作是如何进行调度的? Linux调度就是通 ...

  2. js 中typeof 检测数据类型的时候需要注意的小细节

    博客搬迁给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/10/26/typeof-%E6%A3%80%E6%B5%8B%E6%95%B0%E6%8D% ...

  3. python-Request模块使用

    request 允许发送HTTP/1.1的请求,并为我们封装了更多的方法让我们不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码.Keep-alive 和 HTTP 连接池的功 ...

  4. python之保留有限的历史记录(collections.deque)

    1.deque(maxlen=N)创建一个固定长度的队列,当有新的记录加入而队列已经满时,会自动移除老的记录. from collections import deque q = deque(maxl ...

  5. Pregel的应用实例——单源最短路径

  6. API 数据缓存(本地缓存)

  7. openwrt redis

    2071 make V=s 2072 cd build_dir/target-x86_64_uClibc-0.9.33.2/root-x86/ cd package/network/services/ ...

  8. js实现截取字符串后几位

    var strs ="wdsdabcdefages" strs.substring(obj.filename.lastIndexOf("a")+1,strs.l ...

  9. 关于使用vue-router的嵌套路由的命名路由时踩的坑

    今天在做我的模仿微博项目时,我想实现点击router-link后,跳转到微博正文页面,并渲染其嵌套视图-评论组件.但是在实际实现时,我发现页面可以正常跳转,但是在页面加载后,并不渲染该页面的嵌套视图, ...

  10. 大数据学习路线,来qun里分享干货,

    一.Linux lucene: 全文检索引擎的架构 solr: 基于lucene的全文搜索服务器,实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面. 推荐一个大数据学习群 ...