我从其他Shell脚本中学到了什么?
2018-07-13 08:58:24来源:编程学习网 阅读 ()
作者Fizer Khan是一位Shell脚本迷,他对有关Shell脚本新奇有趣的东西是如此的痴迷。最近他遇到了authy-ssh脚本,为了缓解ssh服务器双重认证问题,他学到了许多有用且很酷的东西。对此,他想分享给大家。
一、Colors your echo
大多数情况下,你希望输出echo Color,比如绿色代表成功,红色代表失败,黄色代表警告。
NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e "$RED$*$NORMAL" } function green() { echo -e "$GREEN$*$NORMAL" } function yellow() { echo -e "$YELLOW$*$NORMAL" } # To print success green "Task has been completed" # To print error red "The configuration file does not exist" # To print warning yellow "You have to use higher version."
这里使用tput来设置颜色、文本设置并重置到正常颜色。想更多了解tput,请参阅prompt-color-using-tput。
二、To print debug information (打印调试信息)
打印调试信息只需调试设置flag。
function debug() { if [[ $DEBUG ]] then echo ">>> $*" fi } # For any debug message debug "Trying to find config file"
某些极客还会提供在线调试功能:
# From cool geeks at hacker news function debug() { ((DEBUG)) && echo ">>> $*"; } function debug() { [ "$DEBUG" ] && echo ">>> $*"; }
三、To check specific executable exists or not (检查特定可执行的文件是否存在)
OK=0 FAIL=1 function require_curl() { which curl &>/dev/null if [ $? -eq 0 ] then return $OK fi return $FAIL }
这里使用which来命令查找可执行的curl 路径。如果成功,那么可执行的文件存在,反之则不存在。将&>/dev/null设置在输出流中,错误流会显示to /dev/null (这就意味着在控制板上没有任何东西可打印)。
有些极客会建议直接通过返回which来返回代码。
# From cool geeks at hacker news function require_curl() { which "curl" &>/dev/null; } function require_curl() { which -s "curl"; }
四、To print usage of scripts (打印使用的脚本)
当我开始编写shell 脚本,我会用echo来命令打印已使用的脚本。当有大量的文本在使用时, echo命令会变得凌乱,那么可以利用cat来设置命令。
cat << EOF Usage: myscript <command> <arguments> VERSION: 1.0 Available Commands install - Install package uninstall - Uninstall package update - Update package list - List packages EOF
这里的<<被称为<<here document,字符串在两个EOF中。
五、User configured value vs Default value (用户配置值VS 默认值)
有时,如果用户没有设置值,那么会使用默认值。
URL=${URL:-http://localhost:8080}
检查URL环境变量。如果不存在,可指定为localhost。
六、To check the length of the string 检查字符串长度
if [ ${#authy_api_key} != 32 ] then red "you have entered a wrong API key" return $FAIL fi
利用 ${#VARIABLE_NAME} 定义变量值的长度。
七、To read inputs with timeout (读取输入超时)
READ_TIMEOUT=60 read -t "$READ_TIMEOUT" input # if you do not want quotes, then escape it input=$(sed "s/[;\`\"\$\' ]//g" <<< $input) # For reading number, then you can escape other characters input=$(sed 's/[^0-9]*//g' <<< $input)
八、To get directory name and file name (获取目录名和文件名)
# To find base directory APP_ROOT=`dirname "$0"` # To find the file name filename=`basename "$filepath"` # To find the file name without extension filename=`basename "$filepath" .html`
英文来源:What-I-learned-from-other-s-shell-scripts
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Centos7下crontab+shell脚本定期自动删除文件 2018-11-22
- Shell脚本编程30分钟入门 2018-07-13
- Shell脚本编程总结及速查手册 2018-07-13
- linux 定时清理文件脚本 shell 2018-07-13
- 常用Linux shell命令汇总,总有一条你需要 2018-07-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash