linux sh : 整理一些细节

转载 2018年04月16日 16:55:41

前言

浏览了一篇讲shell编程的资料。
边看边查资料边实验,学到了一些以前不清楚或不知道的知识点。
e.g.
* linux命令帮助的本地查法 help -m , 以前用man 和info查不到,就得上网去查。这个解决能解决很多问题,上网去查出的资料,如果人家不带例子,还不如本地的帮助好。
* 在脚本中变量的正规用法 ${my_var}
* declare的几种有用的参数
* ‘’和“”的区别。以前我总是用”“.

实验

# !/bin/bash
# @file shell_basic_01.sh
# @brief 整理一些未注意到的细节

# 查看linux命令的帮助(总有一个能看到命令的帮助)
# man the_cmd
# info the_cmd # e.g. info wc
# help -m the_cmd # e.g. help -m declare

# 将一个目录中的所有文件(遍历)权限都改成一样的
# chmod -R 775 ./shell_basic/

# export的用法 e.g. export MY_PRJ_NAME="my_project"

# 查看环境变量(包括用export导出的变量)
# typeset | grep -i "the_keyword_on_OS_env"
# declare | grep -i "the_keyword_on_OS_env"

# declare的用法
# declare: usage: declare [-aAfFilrtux] [-p] [name[=value] ...]
# https://ss64.com/bash/declare.html
# help -m declare
# 觉得有用的几个declare选项
# declare -a 数组
# declare -f 函数
# declare -i 整数
# declare -r 只读

# prog info
declare -r g_str_prog_name="shell_basic_01"
declare -r g_str_prog_ver="1.0.0.1"
declare -r g_str_prog_time="2018-04-16 13:27"

# error code
declare -i MY_RC_OK=0
declare -i MY_RC_ERR=1

# sh脚本函数是没有前向声明的, declare -f fn_xx 不好使(虽然不报错)
# 为了防止调用到后面调用的函数, 将要执行的主代码放到脚本的最后面
# 这样就不会出现调用到后面定义的函数的问题

function fn_main() {
    fn_init
    fn_test_case

    echo "END"

    return ${MY_RC_OK}
}

function fn_init() {
    clear

    # 正规的使用变量的例子 e.g. ${g_str_prog_name}
    # 好处,可以防止bash分不清变量值和后面非变量字符, 等于是用{}显势指定变量名称,不用bash去猜了
    echo "[${g_str_prog_name}][${g_str_prog_ver}][${g_str_prog_time}]"

    return ${MY_RC_OK}
}

function fn_test_case() {
    declare ftype

    # wc --files0-from=F
    #   从F文件中读取文件名作为输入文件。如果F为"-",则从标准输入中读取文件名

    # 从当前目录下的.c和.h文件中取行的最大长度 e.g. 154 总用量
    find . -name '*.[ch]' -print0 | wc -L --files0-from=- | tail -n1

    # sed 用于查找替换字符串
    # awk 用来提取和打印行中的字段(分隔符可自定义)

    ftype=$(file './test.tar')

    # '', 不允许变量扩展
    # "", 允许变量扩展
    echo "ftype = [${ftype}]"
    echo -e 'ftype = [${ftype}]'
    echo 'ftype = [${ftype}]'

    printf 'printf : ftype = [${ftype}]\n'
    printf 'printf : ftype = [%s]\n' "${ftype}"

    # 在格式化字符串中,还是用''围住字符串较好
    # 如果是原样照印, 使用echo
    # 如果不是原样照印, 使用printf + '\n'
}

fn_main
exit 0

关于函数调用的细节

函数调用之前的工作: (1)为被调用函数分配数据存储区; (2)将所有的实参、返回地址等信息传给被调用函数保存; (3)将控制转移到被调用函数的入口。   返回前的工作: (1)保存计算结果...
  • renyp8799
  • renyp8799
  • 2014-10-10 19:01:30
  • 385

与人相处的一些细节

给别人帮忙,比如拿纸巾,不要自己先拿好了,擦完了嘴,再去给别人拿,要先服务他人,与人道别的时候要注视着对方,直到对方的目光移开,开门关门要轻,道谢时也要注视着对方,不要不好意思,真诚一点,待人接物要热...
  • harryaix
  • harryaix
  • 2004-11-11 20:29:00
  • 601

Servlet的一些细节

Servlet的一些细节
  • cckevincyh
  • cckevincyh
  • 2016-03-23 15:01:29
  • 382

spring学习的一些细节问题

Spring框架中加载applicationContext.xml  /  beans.xml配置文件的一些细节问题。 关于(applicationContext.xml  /  beans.xml...
  • u010143291
  • u010143291
  • 2016-08-09 17:59:37
  • 142

php 的小细节

switch 执行易忽略的地方 $a=0; switch($a){ case 1: echo 44; break; case 0: case ...
  • qq_16877261
  • qq_16877261
  • 2017-08-31 16:00:33
  • 1290

android 代码优化的小细节整理

1,最近在对class InSpect code 的过程中,积累了一些优化代码的经验,分享如下: 在Activity中对TextView进行动态更新显示数据时,如果使用: RGB_te...
  • zhzzhz123456
  • zhzzhz123456
  • 2016-11-02 16:52:23
  • 157

java编码小细节注意

一、避免多个返回(退出点) 依照你的方法,确保只有一个退出点。不要在同一个地方或多个地方使用返回。比如,下面的代码,NOT RECOMMENDED(不建议),这是因为有多个退出点(返回语句)。 ...
  • lizhi_java
  • lizhi_java
  • 2014-12-01 17:05:51
  • 501

unity及NGUI的一些细节

在此领域完全新手.记录一些最近使用中摸索出的做法.也不知道是否还有更好的做法..欢迎指正.  随时更新..     NGUI的自适应做的很棒.如果只是想在手机上适配各种分辨率.只需要将UIRoot...
  • ainn_pp
  • ainn_pp
  • 2014-04-12 14:42:24
  • 763

Java编程中的一些细节

编程过程也是一项细心地活动,需要考虑到的地方很多很多,比如下面的各种细节。 Java成员变量(基本数据类型和对象)会被虚拟机初始化为0或null,而局部变量不会被虚拟机初始化,没有手动初始化就是用会...
  • hn_lgc
  • hn_lgc
  • 2018-02-28 13:39:55
  • 22

session的一些细节问题

1、服务器是如何做到一个session为一个浏览器的多次请求而服务? 1.1 服务器创建session出来后,会把 session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器...
  • u014788554
  • u014788554
  • 2014-06-03 22:28:09
  • 651
收藏助手
不良信息举报
您举报文章:linux sh : 整理一些细节
举报原因:
原因补充:

(最多只允许输入30个字)