首页 > 编程知识 正文

shell命令大全(oauth2使用详解)

时间:2023-05-05 20:36:45 阅读:95599 作者:849

背景

使用哪个外壳

Bash是唯一允许运行的shell脚本语言。

可执行文件为#! /fndkh/bash和最小数量的标记开始。 请使用set设置shell选项,以确保在bash script_name中调用脚本不会损坏功能。

通过将所有可执行的shell脚本限制为bash,可以确保所有计算机上安装的shell语言的一致性。

不管你是为了什么进行编码,与此相反,唯一的例外是,在drdyj被强制的时候不需要这样做。 一个例子是Solaris SVR4软件包。 写任何脚本都需要纯Bourne外壳。

什么时候使用Shell

shell应该只用于小功能和简单的软件包脚本。

虽然shell脚本不是开发语言,但在整个谷歌中用于编写许多实用程序的脚本。 本样式指南更多地被认可,因为它可以用于广泛的部署而不是提案。

这些准则如下:

如果主要调用其他工具,并且正在处理相对较小的数据量,则建议使用shell来完成任务。 如果您很在意性能,请选择其他工具,而不是使用壳。 如果需要使用数据而不是变量赋值,如${PHPESTATUS},则需要使用Python脚本。 如果要编写的脚本超过100行,则必须使用Python而不是shell来编写。 脚本行数增加后,请尽快用其他语言重新编写脚本,以免以后重新编写花费时间。

Shell文件和解释器调用

文件扩展名

强烈建议可执行文件没有扩展名或使用. sh扩展名。 库文件必须使用. sh作为扩展名,并且不能执行。

运行程序时,不需要知道它是用什么语言写的。 shell脚本也不需要扩展名。 所以,我更喜欢可执行文件没有扩展名。

但是,关于库文件,知道用什么语言写是很重要的,有时需要用不同语言写的类似的库文件。 使用特定语言后缀(如. sh )作为扩展名,可以为用不同语言编写的具有相同功能的库文件指定相同的名称。

SUID/SGID

suid(setuserid )和sgid ) setgroupid )在shell脚本中是被禁止的。

由于shell存在很多安全问题,因此如果允许SUID/SGID,shell很少会变得足够安全。 虽然bash很难执行SUID,但在某些平台上仍然可以执行。 因此,明确建议禁止。

需要高权限访问时,请使用sudo。

环境

STDOUT vs STDERR

所有的错误信息都应该被导入到STDERR中。

这样就很容易将正常状态从实际问题中分离出来。

建议使用类似以下的函数将错误消息与其他状态信息一起打印。

err () ) )。

echo ' [ $ (日期' % y-% m-%滴度% h : % m : % s % z ' ) ]: $@' 2

}

国际足联! do _求解; 沈恩

'禁用到待办事项'

退出$ _删除_通知'

fi

注释

文件头

每个文件的开头是该文件内容的说明。

每个文件都包含顶级注释,必须简要总结其内容。 版权声明和作者信息是可选的。

例如:

# #!/fnd KH /基础

#

# # performhotbackupsoforacledatabases。

功能注释

显然不是短函数的函数必须被评论。 无论长度和复杂性如何,都必须注释库函数。

其他人可以通过阅读注释(以及帮助信息,如果有)而无需阅读代码来学习如何使用程序和库函数。

的函数注释必须包括以下内容:

函数说明用于使用和修改全局变量的参数的说明返回值,而不是执行上一个命令后的默认终止状态。 例如,它可能如下所示:

# #!/fnd KH /基础

#

# # performhotbackupsoforacledatabases。

出口路径='/USR/XP G4/FND KH :/USR/Fnd KH :/OPT/CSW/Fnd KH 3360/OPT /谷歌/Fnd KH '

# # # # #

# #从# Cleanup files from the backup dir

# #全球:

# #备份_ dir

# ORACLE_SID

# Arguments:

# #无

# Returns:

# #无

# # # # #

清除()

.

}

实施部分的注释

你的代码包含技巧、不起眼、有趣或重要的部分。

这部分遵循谷歌代码注释的一般做法。 不要评论所有的代码。 如果有复杂的算法,或者你做了和别人不一样的事,放入简单的评论。

待办事项注释

使用TODO注释来注释临时、短期的解决方案,或者足够好但不完美的代码。

这个和这个

C++指南中的约定相一致。

TODOs应该包含全部大写的字符串TODO,接着是括号中你的用户名。冒号是可选的。最好在TODO条目之后加上 bug或者ticket 的序号。

例如:

# TODO(mrmonkey): Handle the unlikely edge cases (bug ####)

格式

缩进

缩进两个空格,没有制表符。

在代码块之间请使用空行以提升可读性。缩进为两个空格。无论你做什么,请不要使用制表符。对于已有文件,保持已有的缩进格式。

行的长度和长字符串

行的最大长度为80个字符。

如果你必须写长度超过80个字符的字符串,如果可能的话,尽量使用here document或者嵌入的换行符。长度超过80个字符的文字串且不能被合理地分割,这是正常的。但强烈建议找到一个方法使其变短。

# DO use 'here document's cat <<END; I am an exceptionally long string. END # Embedded newlines are ok too long_string="I am an exceptionally long string."

管道

如果一行容不下整个管道操作,那么请将整个管道操作分割成每行一个管段。

如果一行容得下整个管道操作,那么请将整个管道操作写在同一行。

否则,应该将整个管道操作分割成每行一个管段,管道操作的下一部分应该将管道符放在新行并且缩进2个空格。这适用于使用管道符’|’的合并命令链以及使用’||’和’&&’的逻辑运算链。

# All fits on one line command1 | command2 # Long commands command1 | command2 | command3 | command4

循环

请将 ; do , ; then 和 while , for , if 放在同一行。

shell中的循环略有不同,但是我们遵循跟声明函数时的大括号相同的原则。也就是说, ; do , ; then 应该和 if/for/while 放在同一行。 else 应该单独一行,结束语句应该单独一行并且跟开始语句垂直对齐。

例如:

for dir in ${dirs_to_cleanup}; do if [[ -d "${dir}/${ORACLE_SID}" ]]; then log_date "Cleaning up old files in ${dir}/${ORACLE_SID}" rm "${dir}/${ORACLE_SID}/"* if [[ "$?" -ne 0 ]]; then error_message fi else mkdir -p "${dir}/${ORACLE_SID}" if [[ "$?" -ne 0 ]]; then error_message fi fi done

case语句

通过2个空格缩进可选项。在同一行可选项的模式右圆括号之后和结束符 ;; 之前各需要一个空格。长可选项或者多命令可选项应该被拆分成多行,模式、操作和结束符 ;; 在不同的行。

匹配表达式比 case 和 esac 缩进一级。多行操作要再缩进一级。一般情况下,不需要引用匹配表达式。模式表达式前面不应该出现左括号。避免使用 ;& 和 ;;& 符号。

case "${expression}" in a) variable="..." some_command "${variable}" "${other_expr}" ... ;; absolute) actions="relative" another_command "${actions}" "${other_expr}" ... ;; *) error "Unexpected expression '${expression}'" ;; esac

只要整个表达式可读,简单的命令可以跟模式和 ;; 写在同一行。这通常适用于单字母选项的处理。当单行容不下操作时,请将模式单独放一行,然后是操作,最后结束符 ;; 也单独一行。当操作在同一行时,模式的右括号之后和结束符 ;; 之前请使用一个空格分隔。

verbose='false' aflag='' bflag='' files='' while getopts 'abf:v' flag; do case "${flag}" in a) aflag='true' ;; b) bflag='true' ;; f) files="${OPTARG}" ;; v) verbose='true' ;; *) error "Unexpected option ${flag}" ;; esac done

变量扩展

按优先级顺序:保持跟你所发现的一致;引用你的变量;推荐用 ${var} 而不是 $var ,详细解释如下。

这些仅仅是指南,因为作为强制规定似乎饱受争议。

以下按照优先顺序列出。

与现存代码中你所发现的保持一致。引用变量参阅下面一节,引用。除非绝对必要或者为了避免深深的困惑,否则不要用大括号将单个字符的shell特殊变量或定位变量括起来。推荐将其他所有变量用大括号括起来。# Section of recommended cases. # Preferred style for 'special' variables: echo "Positional: $1" "$5" "$3" echo "Specials: !=$!, -=$-, _=$_. ?=$?, #=$# *=$* @=$@ $=$ ..." # Braces necessary: echo "many parameters: ${10}" # Braces avoiding confusion: # Output is "a0b0c0" set -- a b c echo "${1}0${2}0${3}0" # Preferred style for other variables: echo "PATH=${PATH}, PWD=${PWD}, mine=${some_var}" while read f; do echo "file=${f}" done < <(ls -l /tmp) # Section of discouraged cases # Unquoted vars, unbraced vars, brace-quoted single letter # shell specials. echo a=$avar "b=$bvar" "PID=${$}" "${1}" # Confusing use: this is expanded as "${1}0${2}0${3}0", # not "${10}${20}${30} set -- a b c echo "$10$20$30"

引用

除非需要小心不带引用的扩展,否则总是引用包含变量、命令替换符、空格或shell元字符的字符串。推荐引用是单词的字符串(而不是命令选项或者路径名)。千万不要引用整数。注意 [[ 中模式匹配的引用规则。请使用 $@ 除非你有特殊原因需要使用 $* 。# 'Single' quotes indicate that no substitution is desired. # "Double" quotes indicate that substitution is required/tolerated. # Simple examples # "quote command substitutions" flag="$(some_command and its args "$@" 'quoted separately')" # "quote variables" echo "${flag}" # "never quote literal integers" value=32 # "quote command substitutions", even when you expect integers number="$(generate_number)" # "prefer quoting words", not compulsory readonly USE_INTEGER='true' # "quote shell meta characters" echo 'Hello stranger, and well met. Earn lots of $

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。