《Linux shell 脚本攻略》第1章——读书笔记
文件描述符及重定向
echo "This is a sample text 1" > temp.txt
# 文本重定向,截断文件的方式
# 意思是在把echo命令的输出写入文件前,temp.txt文件会被清空
cat temp.txt
echo "----"
echo "This is a sample text 2" >> temp.txt
# 追加文件方式
cat temp.txt
This is a sample text 1
----
This is a sample text 1
This is a sample text 2
错误信息输出
成功和不成功的命令
当一个命令发生错误并退回时,它会返回一个非0的退出状态
退出状态怎么看?
echo $?就可以打印出退出状态
# 会将stderr文本打印到屏幕上,而不是文件,因为没有
ls + > out.txt
# stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中
ls + >output.txt 2>&1
# tee追加方式写入
cat out.txt | tee -a out.txt | cat -n
bash
函数和参数
以两种方式实现fabonacii数列为例
#!/bin/bash
#递归方式实现斐波那契数列
function fib()
{
var=$1
if [[ $var = 1 || $var = 2 ]]; then
var=1
elif [[ $var -lt 1 ]]; then
return
else
var=`echo "$(fib $(( $var-2 ))) + $(fib $(( $var-1 )))" | bc `
fi
echo $var
return $?
}
#递推方式实现斐波那契数列
function fib2()
{
array_list=(0 1 1)
var=$1
if [[ $var -lt 1 ]]; then
return
fi
for((i=3;i<=$var;i++));do
array_list[$i]=`echo "${array_list[$(($i-1))]} + ${array_list[$(($i-2))]}" | bc `
done
echo ${array_list[$var]}
return $?
}
n=$1
result=$(fib $n)
echo $result
result=$(fib2 $n)
echo $result
迭代器
#!/bin/bash
# 三种循环方式
function loop()
{
for((i=0;i<10;i++)){
echo $i
}
count=0
while [[ $count -ne 10 ]]; do
# count=`echo "$count + 1" | bc`
let count++
echo $count
done
count=0
until [ $count -eq 10 ]; do
let count++
echo $count
done
}
loop
算术比较
-eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
文件系统相关测试
p39
-f 是否是文件
-x 是否是可执行
-d 是否是目录
-e 是否存在
-c 是否是字符设备文件
-b 是否是块设备文件
-w 是否是可写文件
-r 是否是可读文件
-L 是否是符号链接
e.g.
#!/bin/bash
function sys_test()
{
# 文件存在
fpath="/etc/passwd"
[ -e $fpath ] && echo "file exist"
# 文件不存在
fpath='/qwdwq/qwdwqd'
[ -e $fpath ] || echo "file not exist"
}
sys_test
字符串进行比较
#!/bin/bash
function str_cmp()
{
str1=$1
str2=$2
if [ -z $str1 ] || [ -z $str2 ];then
echo "empty"
return 1
fi
if [[ $str1 > $str2 ]];then
echo "$str1 is bigger then $str2"
elif [[ $str1 < $str2 ]];then
echo "$str2 is bigger then $str1"
elif [[ $str1 == $str2 ]]; then
echo "$str1 equels to $str2"
fi
return 0
}
str_cmp $1 $2
《Linux shell 脚本攻略》第1章——读书笔记的更多相关文章
- Linux Shell脚本攻略
-Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...
- 老李分享:《Linux Shell脚本攻略》 要点(一)
老李分享:<Linux Shell脚本攻略> 要点(一) 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...
- 读《Linux Shell脚本攻略》(第2版) 总结
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...
- 读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 第一遍体会解读:就像黑夜中的灯塔,指明前进的道路. 推荐指数:强烈推荐. 书中讲解的 ...
- linux shell 脚本攻略学习20--awk命令入门详解
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
- 读书笔记--Linux Shell脚本攻略
总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理到远程ssh等等,都给出来作者挑选 ...
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- Linux shell 脚本攻略之统计文件的行数、单词数和字符数
摘自:<Linux shell 脚本攻略>
- Linux shell 脚本攻略之创建不可修改文件
摘自:<Linux shell 脚本攻略>
- Linux shell 脚本攻略之生成任意大小的文件
摘自:<Linux shell 脚本攻略>
随机推荐
- 移动端元素定位辅助神器-WEditor
WEditor可以做什么? 编辑器能够提供辅助编写脚本,查看组件信息,调试代码等功能. 移动端除了用 Appium 来 做元素定位外,还可以通过 WEditor 来完成. 前置环境依赖按照 以 win ...
- 4.使用二进制方式搭建K8S集群
使用二进制方式搭建K8S集群 注意 [暂时没有使用二进制方式搭建K8S集群,因此本章节内容不完整... 欢迎小伙伴能补充~] 准备工作 在开始之前,部署Kubernetes集群机器需要满足以下几个条件 ...
- C# Winform 子窗体提交后更新父窗体datagridview数据(事件和委托)
首先整理思路 子类调用父类的dgv控件,如果是使用委托和事件的方式,应该在子类定义委托和事件. 见图1 父类将刷新datagridview的方法传入事件中. 见图2 子类再调用此事件.见图3 那么父窗 ...
- pycharm生成的allure测试报告如何查看本地的index.html文件?
pycharm生成的allure测试报告应该是通过服务启动查看,但是如果把这个文件保存到本地查看,直接打开页面无内容 可以使用allure-combine工具实现本地正常打开 `from allure ...
- CommonsCollections7(基于ysoserial)
环境准备 JDK1.8(8u421)我以本地的JDK8版本为准.commons-collections(3.x 4.x均可这里使用3.2版本) cc3.2: <dependency> &l ...
- kafka之介绍
Kafka 由于高吞吐量.可持久化.分布式.支持流数据处理等特性而被广泛应用.但当前关于Kafka原理及应用的相关资料较少,在我打算编写本文时,还没有见到中文版本的Kafka相关书籍,对于初学者甚至是 ...
- Django之gunicorn部署
安装: pip install gunicorn 启动应用: gunicorn -w 3 -k gthread -e DJANGO_SETTINGS_MODULE=settings.prod Serv ...
- 基于python的文件监控watchdog
实时监控第三方库watchdog,其原理通过操作系统的时间触发的,不需要循环和等待 使用场景: 1.监控文件系统中文件或目录的增删改情况 2.当特定的文件被创建,删除,修改,移动时执行相应的任务 1. ...
- taro 编译报:模块引入顺序不一致报错
前情 最近在开发一个小程序项目,基于公司的技术栈是React,于是使用Taro来开发小程序. 坑位 在开发中经常性的报类似如下的错误,大致意思是说你引入模块的顺序在不同模块中不一致 Why? 主要是m ...
- Electron包下载经常失败或太慢问题
前情 Electron是很好的桌面端开发框架,公司有个桌面端项目就是基于Electron开发的. 坑 在项目初始化的时候,需要通过npm install安装项目需要依赖的模块,但是经常报Electro ...