Month: February 2018

Shell:验证json文件各式是否正确, Validate JSON from the command line on Linux, Format JSON with Python

  现在以json为数据传输格式的RESTful接口非常流行。为调试这样的接口,一个常用的办法是使用curl命令: curl http://somehost.com/some-restful-api 对于返回的json字符串,一般在服务端不加处理的情况下,都是没有任何’\t’和’\n’的。为了方便查看,在bash上可以简单地对它进行格式化: curl http://somehost.com/some-restful-api | python -m json.tool 当然这要求机器上安装了python,其实也就是利用了json.tool这个程序。   一旦json文件格式不对,或者文件内容缺失或者其… Read More

Ubuntu:shell脚本运行异常, bash和dash的区别, sh和bash的区别, bash、dash与zsh shell, source、sh、bash、./执行脚本的区别

今天想运行一下非常简单的代码:test.sh #!/bin/bash str="Learn to Split a String in Bash Scripting" IFS=' ' # space is set as delimiter read -ra ADDR <<< "$str" # str is read into an array as tokens separated by IFS for i in "${ADDR[@]}"; do # access each element of

Shell:AWK 简明教程, AWK 入门教程, AWK 格式化输出, AWK 过滤记录, AWK 符串匹配, AWK 折分文件, AWK 分割字符串等实例

awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Bri… Read More

Shell:SED 简明教程, 流编辑器 SED 全教程, sed入门详解教程

sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed 的具体用法,但是个人觉得没有必要去学习它的每个细节,那样没有特别大的实际意义。网上也有很多关于 sed 的教程,我也是抱着学习的心态来学习 sed 的常见的用法,并进行系统的总结,内容基本覆盖了 sed 的大部分的知识点。文中的内容比较简练,加以实际示例来帮助去理解 sed 的使用。 一、写在前边 1、sed介绍 sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本,功能相当的强大。是贝尔实验室的 Lee E.McMahon 在 197… Read More

Shell:jq 循环 json 对象, jq 循环 json 数组, jq 用法实践, jq converts a JSON object to key=value, jq parses one field from an JSON array into bash array

  1. 转换数字为字符串 How do I use jq to convert number to string? Given the following jq command and Json: jq '.|[.string,.number]|join(": ")' <<< ' [ { "number": 3, "string": "threee" }, { "number": 7, "string": "seven" } ] ' I’m trying to format the output

Shell: Shell中while循环的陷阱, 变量实效, 无法赋值变量

  在写while循环的时候,发现了一个问题,在while循环内部对变量赋值、定义变量、数组定义等等环境,在循环外面失效。 一个简单的测试脚本如下: #!/bin/bash echo "abc xyz" | while read line do new_var=$line done echo new_var is null: $new_var? 执行结果证明,$new_var的结果是空值。在google上查了查,才发现问题出在管道上。加上自己的总结,特分享两个使用while循环时的陷阱。 先看看下面的内容。 while循环的写法有好几种,它的语法结构为: while test_cmd_list; do cmd_list; done 但更… Read More

Linux Shell:使用 SendGrid Email API 发送邮件, SendGrid App for google cloud platform, php, phython, shell script 发送邮件

什么是 SendGrid 电子邮件服务? SendGrid 是一项基于云的电子邮件服务,该服务提供了可靠的事务电子邮件传递、伸缩性、实时分析以及可用于简化自定义集成的灵活的 API。 常见 SendGrid 使用方案包括: 自动向客户发送收据 管理用于每月向客户发送电子传单和特惠产品/服务的通讯组列表 收集诸如已阻止的电子邮件和客户响应性等项目的实时度量值 生成用于帮助确定趋势的报告 转发客户查询 以电子邮件的形式从应用程序发送通知 有关详细信息,请参阅 https://sendgrid.com。 创建 SendGrid 帐户 注册地址:sendgrid 免费客户每月可解锁 40k 封免费电子邮件。 通过每月的这 40k 封免费电子邮件… Read More

Linux: Apache索引(目录浏览)设置, 禁止 Apache 显示目录索引, 自定义索引(目录浏览)样式

在浏览一些镜像文件站的时候,会发现网站目录是可以浏览文件(夹)列表的。只要 Web 服务器是基于 Apache 的网站都可以开启或禁止索引(目录浏览),那么如何实现禁止和开启显示目录索引呢? 一、禁止 Apache 显示目录索引 方法1、修改Apache配置文件[apache2.conf] # sudo vi /etc/apache2/apache2.conf # 没有的话,可以尝试 # sudo vi /etc/apache2/sites-available/000-default.conf # 还没有的话,可以尝试 # sudo vi /etc/apache2/httpd.conf (1)目录配置 <Directory /home/ww… Read More

Shell:自动无密码提交git, cron git push with ssh key, 无密码提交git 到 Bitbucket或者GitHub

定时任务: 0 0 * * * /home/username/Sites/git/repo/commit.sh commit.sh 文件 #!/usr/bin/env bash GIT=`which git` REPO_DIR=/var/www/html/ cd ${REPO_DIR} ${GIT} add -u . ${GIT} commit -a -m "Daily Crontab Backup at "$(date "+%Y-%m-%d %H:%M:%S") ${GIT} push -u origin master   实现步骤 1.  生成密钥: cd ~/.ssh/ #Your ssh directory ssh-keygen -t rsa -f my_rsa -C "yo…

Shell:无比强大的shell之json解析工具jq , Linux命令行解析json, jq解析 json 实例

  JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode,干的相当的漂亮。Linux下也有处理处理JSON的神器:jq。 对于JSON格式而言,jq就像sed/awk/grep这些神器一样的方便,而也,jq没有乱七八糟的依赖,只需要一个binary文件jq,就足矣。下面我们看下jq的使用。 1. 安装 官网:https://stedolan.github.io/jq/download/ Linux jq 1.5 is in the official Debian and Ubuntu repositories. Inst… Read More

Linux Shell系列教程之(二十) Shell 脚本中一些特殊符号:# ; ;; . , / \\ ‘string’| ! $ ${} $? $$ $* \”string\”* ** ? : ^ $# $@ `command`{} [] [[]] () (()) || && {xx,yy,zz,…}~ ~+ ~- & \\<...\\> + – %= == !=

在shell中常用的特殊符号罗列如下: # ;   ;; . , / \\ ‘string’| !   $   ${}   $? $$   $* \”string\”* **   ? : ^ $#   $@ `command`{}   [ ()   (()) ||   && {xx,yy,zz,…}~   ~+   ~-   &   \\<…\\>   + – %=   ==   != # 井号 (comments) 这几乎是个满场都有的符号,除了先前已经提过的\”第一行\” #!/bin/bash 井号也常出现在一行的开头,… Read More

Linux Shell系列教程之(十九) Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真 实例演示: num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!' else echo '两个数不相等!' fi 输出结果: 两个数相等! 代码中的 执行基本的算数运算,如: #!/bin/bash a=5 b=6 result=$[a+b] # 注意等号两边不能有空格 echo "result 为: $result" 结果为: result 为: 11 字符串测试 参数… Read More

Linux Shell系列教程之(十八) Shell 基本运算符

Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加(注意使用的是反引号 ` 而不是单引号 ‘): #!/bin/bash val=`expr 2 + 2` echo "两数之和为 : $val" 执行脚本,输出结果如下所示: 两数之和为 : 4 两点注意: 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。 完整的表达式要被 ` ` 包含,注意这… Read More