Pingfan's Blog

Pingfan's Blog

The quieter you become, the more you are able to hear.

bash脚本debug技巧
调试在shebang最后一行加入-x, 这样每执行一行命令都会把执行的语句打印出来。例如: #!/usr/bin/env bash -x backup_file() { if [[ -f $1 ]] # 1. check if its a file and it does exists then # basename 将前面的路径都剔除,只保留文件名 # $$表示pid(正在运行当前脚本的进程id)。在这里使用这个,为了防止同一天多次备份时,前面的备份被覆盖。 local BACK="/tmp/$(basena...
bash中的return code和exit status
[toc] return code当执行完一条命令后,可以使用$?来访问它的执行结果。如果执行成功,则=0,如果执行失败,则为1-255。例如: [@bogon:myBlog2]$ man cp [@bogon:myBlog2]$ echo "$?" 0 [@bogon:myBlog2]$ cat /host/sd cat: /host/sd: No such file or directory [@bogon:myBlog2]$ echo "$?" 1 例如下面ping的例子,如果ping通,则返回码为0表示成功,如果ping不通,则返回码为大...
bash编程——函数的return code
显示返回:return <RETURN_CODE> 隐式返回:如果不指定,则默认以函数体最后一行的执行结果作为返回 返回的code在1-255之间。 其中0=success。 可以使用$?来获取函数执行的结果来进行判断。 例如下面的备份函数(功能:传入要备份的文件路径,将文件备份到/tmp目录下) #!/usr/bin/env bash backup_file() { if [[ -f $1 ]] # 检测$1是不是已存在的文件 then # basename 将前面的路径都剔除,只保留文件名 # $$表示pid(正在运行当前...
Gogs在docker下的部署
下载镜像及启动容器# Pull image from Docker Hub. $ docker pull gogs/gogs # 创建一个卷用于存储数据 $ mkdir -p /var/gogs # 第一次启动 $ docker run -itd --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs # 第二种方式,使用docker volume: $ docker run --name=gogs -p 10022:22 -p 10080:3000 -v gogs-data:/data gogs/gog...
linux bash——详解case关键字
通用语法case语句相当于其他语言的switch,如果if对同一个变量要判断很多种情况,可以用case语句来写。 通用语法如下: case "$VAR" in pattern_1) # Commands go here. ;; pattern_N) # Commands go here. ;; esac 双分号;;表示终止case语句执行。类似于其他编程语言的break关键字。 例如对于ssh start和ssh stop: case "$1" in ...
bash脚本军规
脚本以shebang开头。例如: #!/bin/bash shebang下面紧跟一行注释,表示脚本的用途,例如: # This script creates a backup of every MySQL database on the system. 下面紧跟全局变量声明,并赋值: DEBUG=true HTML_DIR=/var/www 函数应该注意使用局部变量,例如: local GREETING="Hello!" 所有函数声明放到上半部分,shell主体应该在函数的下面 脚本退出应该有明确的exit status, 例如...
goland加速开发的五个技巧
struct实现interface在struct名上按Option + Enter,会出现Implement interface,然后出现一个搜索框,在里面输入想实现的interface名,就可以实现该interface。 当然也可以ctrl + I,这样不用进行选择就可以直接输入interface名。 livetemplate - forr可以迅速遍历一个map或数组: 填充结构体如果一个函数中需要返回一个结构体,需要对这个结构体中的每个成员都进行赋值,很麻烦。 可以使用快速填充功能: 例如getSong中返回Song结构体,在{}之间按Option + Enter,出现Fil...
golang库——Viper源码分析
Viper是非常好用的加载配置的golang库。源码分析如下: 分析思路,从一段使用的实际代码来分析一步步流程。 func main() { v := viper.New() v.SetConfigName("config.development") // 配置文件名 v.SetConfigType("json") // 配置文件的类型 v.AddConfigPath("./config/") // 配置文件的路径 if err := v.ReadInConfig(); err != nil { fmt....
GraphQL初探
参考:https://medium.freecodecamp.org/a-beginners-guide-to-graphql-86f849ce1bec 什么是GraphQLGraphQL可以更高效的设计和使用API,它是REST的替代品,它具有以下优点: 只获取到想获取的内容。使用REST,通常获取的信息会过载,需要提取出有用的字段。 强类型(strongly-typed),在执行前可以做检查。 graphql的官网:https://graphql.org/ Getting started学习GraphQL,需要有GraphQL的服务端。 可以使用Graphpack,它不需要进行配...
MAC下神器alfred的使用
Alfred是一个让你可以丢掉鼠标的神器。 Alfred分为基本搜索和快速启动的功能,以及工使用自定义插件的工作流功能。 功能功能1 谷歌搜索 + 打开网址平时使用google search,你要经历以下步骤: 打开浏览器 新建一个标签页。 在标签页的搜索框里输入你想要搜索的字符串。 但使用alfred后,感受一下: 另外,打开网站也很方便,不需要切换到chrome -> 新建标签页 -> 输入网址,只需要: 功能2 配合dash查文档在开发时,如果遇到一个函数不懂它的用法,需要登录它的语言官网 => 在官网的搜索框中输入函数名=>选择结果打开。而配合da...
avatar
平凡
Nothing is true, everything is permitted.
FRIENDS
friendA friendB