`
sunting_bcwl
  • 浏览: 96398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sh语法概要(转)

    博客分类:
  • Unix
阅读更多
原文:http://jxcangel.blog.163.com/blog/static/4288510020103232348857/

SH 语法概要 

2010-04-02 15:23:48|  分类: FreeBSD |字号 订阅
###########################  SH 运行选项 ###########################
-x    输出sh运行时的详细步骤,这个选项将脚本运行期间每一行的具体运行过程显示出来,包括变量的值以及运行了哪些命令之类的,用来做调试非常方便。如果是脚本内部,那么就在第一行加上 "#!/bin/sh -x",如果是外部,那么直接用 "sh -x [脚本]" 就可以了。

########################### BASH 特殊字符 ###########################
#        注释.
;        命令分隔符,可以在同一行上写两个或两个以上的命令.
;;        终止case选项.
.        "点"命令等价于source命令,freebsd不支持source命令,所以这也是脚本中调入其他脚本的方法.
         "点"作为文件名的一部分. 如果点放在文件名的开头的话, 那么这个文件将会成为隐藏文件,
         "点"字符匹配. "点"用来匹配任何的单个字符.
""       部分引用[双引号, 即"]. "STRING"将会阻止(解释)STRING中大部分特殊的字符.
''       全引用[单引号, 即']. 'STRING'将会阻止STRING中所有特殊字符的解释. 这是一种比使用"更强烈的形式.
,        逗号操作符. 逗号操作符链接了一系列的算术操作. 虽然里边所有的内容都被运行了,但只有最后一项被返回.
\        转义符[反斜线, 即\]. 一种对单字符的引用机制.
/        文件名路径分隔符[斜线, 即/],也可以用来作为除法算术操作符.
``       命令替换. 已逐渐被$()替代,后者更灵活,如可以嵌套等
:        空命令[冒号, 即:]. 也可以被认为与shell的内建命令true作用相同.
!        取反操作符[叹号, 即!].
*        通配符[星号, 即*]. *可以用来做文件名匹配,也可以用在正则表达式中, 用来匹配任意个数(包含0个)的字符.
         算术操作符. 在算术操作符的上下文中, *号表示乘法运算.
         如果要做求幂运算, 使用**, 这是求幂操作符.
?        测试操作符. 在一个特定的表达式中, ?用来测试一个条件的结果.
         在一个双括号结构中, ?就是C语言的三元操作符.
         在参数替换表达式中, ?用来测试一个变量是否被set了.
         通配符. ?在通配(globbing)中, 用来做匹配单个字符的"通配符".
$        变量替换(引用变量的内容).
         行结束符. 在正则表达式中, "$"表示行结束符.
${}      参数替换.
$*       位置参数
$@       同上.
$?       退出状态码变量. $?变量保存了一个命令, 一个函数, 或者是脚本本身的退出状态码.
$$       进程ID变量. 这个$$变量保存了它所在脚本的进程ID.
()       命令组.
{}       代码块,又被称为内部组, 这个结构事实上创建了一个匿名函数(一个没有名字的函数).
[]       条件测试.数组元素.用作正则表达式的一部分, 方括号描述一个匹配的字符范围.
[[]]     测试.
(())     整数扩展.
>
&>
>&
>>
<
<>       重定向.
<<       用在here document中的重定向.http://doc.linuxpk.com/doc/abs/here-docs.html#HEREDOCREF
<<<      用在here string中的重定向.
<
>        ASCII comparison.
\<
\>       正则表达式中的单词边界.
|        管道.
>|       强制重定向(即使设置了noclobber选项 -- 就是-C选项). 这将强制的覆盖一个现存文件.
||       或-逻辑操作.
&        后台运行命令.
&&       与-逻辑操作. 
-        选项, 前缀.
         用于重定向stdin或stdout[破折号, 即-].
         先前的工作目录.
         减号. 减号属于算术操作.
=        等号. 赋值操作,"="也用来做字符串比较操作.
+        加号. 加法算术操作.某些命令内建命令使用+来打开特定的选项, 用-来禁用这些特定的选项.
%        取模. %也是一种模式匹配操作. 在BASH中,%number表示将后台编号为number的任务调度到前台执行。
~        home目录[波浪号, 即~].
~+       当前工作目录. 相当于$PWD内部变量.
~-       先前的工作目录. 相当于$OLDPWD内部变量.
=~       正则表达式匹配. 这个操作将会在version 3版本的Bash部分进行讲解.
^        行首. 在正则表达式中, "^"表示定位到文本行的行首.


########################### BASH 文件测试 ###########################
-e       文件存在.
-f       表示这个文件是一个一般文件.
-d       表示这是一个目录.
-b       表示这是一个块设备.
-c       表示这是一个字符设备.
-p       这个文件是一个管道
-s       文件大小不为零.
-L       这是一个符号链接
-S       表示这是一个socket
-t       文件(描述符)被关联到一个终端设备上.
         这个测试选项一般被用来检测脚本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否来自于一个终端.
-r       文件是否具有可读权限(指的是正在运行这个测试命令的用户是否具有读权限)
-w       文件是否具有可写权限(指的是正在运行这个测试命令的用户是否具有写权限)
-x       文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限)
-g       set-group-id(sgid)标记被设置到文件或目录上
-u       set-user-id (suid)标记被设置到文件上
-k       设置粘贴位
-O       判断你是否是文件的拥有者
-G       文件的group-id是否与你的相同
-N       从文件上一次被读取到现在为止, 文件是否被修改过
!        "非" -- 反转上边所有测试的结果(如果没给出条件, 那么返回真).


########################### BASH 比较操作 ###########################
------------文件比较------------
f1 -nt f2
        文件f1比文件f2新
f1 -ot f2
        文件f1比文件f2旧
f1 -ef f2
        文件f1和文件f2是相同文件的硬链接
------------整数比较------------
-eq        等于
-ne        不等于
-gt        大于
-ge        大于等于
-lt        小于
-le        小于等于
<          小于
<=         小于等于
>          大于
>=         大于等于
------------字符串比较------------
=          等于
==         等于
!=         不等号
<          小于, 按照ASCII字符进行排序
>          大于, 按照ASCII字符进行排序
-z         字符串为"null", 意思就是字符串长度为零
-n         字符串不为"null".
-l         字符串长度
------------逻辑操作------------
-a         逻辑与
-o         逻辑或
!          逻辑非


########################### BASH 参数替换 ###########################
下面的参数扩展中,注意{}中的是变量名,比如一个变量名是 parameter,那么取这个变量的值就用 $parameter,如果希望直接做下面的操作,那么就要用下面的格式了,千万不要变成 ${$parameter}这样的格式,这是很容易犯的错误。
------------参数扩展------------
${parameter}                    与$parameter相同, 用来强行指定一个变量名,比如 ${parameter}_src.
${parameter-default}     如果变量parameter没声明, 那么就使用默认值.
${parameter:-default}    如果变量parameter没设置, 那么就使用默认值.
${parameter=default}     如果变量parameter没声明, 那么就把它的值设为default.
${parameter:=default}    如果变量parameter没设置, 那么就把它的值设为default.
${parameter+value}       如果变量parameter被声明了, 那么就使用value, 否则就使用null字符串.
${parameter:+value}      如果变量parameter被设置了, 那么就使用value, 否则就使用null字符串.
${parameter?err_msg}   如果parameter已经被声明, 那么就使用设置的值, 否则打印err_msg错误消息.
${parameter:?err_msg}  如果parameter已经被设置, 那么就使用设置的值, 否则打印err_msg错误消息.
------------子串删除------------
${#var}                           字符串长度(变量$var的字符个数). 对于array来说, ${#array}表示的是数组中第一个元素的长度.
${var#Pattern}                   从变量$var的开头删除最短匹配$Pattern的子串.
${var##Pattern}                 从变量$var的开头删除最长匹配$Pattern的子串.
${var%Pattern}                 从变量$var的结尾删除最短匹配$Pattern的子串.
${var%%Pattern}              从变量$var的结尾删除最长匹配$Pattern的子串.
------------子串替换------------
${var:pos}                         变量var从位置pos开始扩展(译者注: 也就是pos之前的字符都丢弃).
${var:pos:len}                    变量var从位置pos开始, 并扩展len个字符.
${var/Pat/Rep}                   使用Rep来替换变量var中第一个匹配Pat的字符串.
${var//Pat/Rep}                  使用Rep来替换变量var中的所有匹配Pat的字符串.
${var/#Pat/Rep}                 如果变量var的前缀匹配Pat, 那么就使用Rep来替换匹配到Pat的字符串.
${var/%Pat/Rep}                如果变量var的后缀匹配Pat, 那么就使用Rep来替换匹配到Pat的字符串.

${!varprefix*}
${!varprefix@}                     匹配所有之前声明过的, 并且以varprefix开头的变量.


########################### BASH 进程替换 ###########################
>(command)
<(command)


########################### BASH 变量定义 ###########################
declare用法
-r        只读
-i         整型
-a         数组
-f         函数
-x export    这句将会声明一个变量, 并作为这个脚本的环境变量被导出.
-x var=$value    允许在声明变量类型的同时给变量赋值.


########################### BASH 控制结构 ###########################
----if结构----
if  command
then
        command
elif  command
then
        command
else
        command
fi
例:
var=70;
if (($var<60))
then
    echo "too bad"
elif (($var>90))
then
    echo "very good"
else
    echo "OK"
fi

----case结构----
case variable in
value1)
        command1
        ;;
value2)
        command2
        ;;
*)
        command3
        ;;
esac
例:
cat << ENDIT
        1)one
        2)two
ENDIT
read choice;
case "$choice" in
1)
        echo "one"
        ;;
2)
        echo "two"
        ;;
*)
        echo "Error"
        ;;
esac

----for结构----
for variable int world_list
do
        command
done
例:
for line in ~/*
do
        echo $line;
done

----while结构----
while command
do
        command
done
例:
var=1
while ((var<=30))
do
        echo $var
        let "var=var+1"
done

----函数使用----
function() {
    ........
}

$1-9    1-9个参数
分享到:
评论

相关推荐

    卫生系统业务设计概要说明书

    【卫生系统业务设计概要说明书】的文档似乎与卫生系统的业务设计有关,但提供的内容却集中在英语语法速记口诀上。尽管这并不是卫生系统业务设计的直接知识点,我们可以从中推测,这个文档可能是用于教学或者培训,...

    python的概要介绍与分析

    ### Python 概要介绍与分析 #### 一、Python简介 Python是一种高级、通用的编程语言,因其简洁的语法和广泛的库支持,在多个领域中得到了广泛的应用,包括但不限于数据科学、Web开发、自动化脚本编写以及人工智能...

    linux命令之useradd命令使用方法概要.pdf

    Linux 命令之 useradd 命令使用方法概要 本文主要介绍了 Linux 系统中的 useradd 命令的使用方法,包括用户账号的添加、删除与修改、用户口令的管理、用户组的管理方法。 一、 Linux 系统用户账号的管理 用户账号...

    pi-cardano-node-setup:在运行64位aarch64 Ubuntu LTS的Raspberry Pi 4上安装Cardano中继节点的Bash脚本

    概要 pi-cardano-setup.sh:Bash脚本,用于在运行64位aarch64 Ubuntu LTS的Raspberry Pi 4上安装Cardano中继节点 程式码范例 示例调用如下。 TCP端口3000上新的(超频)主网设置:pi-cardano-setup.sh -D -b build...

    MELSEC-QL编程手册(结构化文本篇).pdf

    ST语言是一种高级的编程语言,它具有类似Pascal、C和其他高级编程语言的语法结构,这对于已有编程经验的工程师来说,可以更容易上手。接下来,手册介绍了MELSEC-Q/L系列PLC中ST程序的特点,包括它与传统梯形图编程...

    Bash新手指南

    - **C Shell (csh)**:语法类似C语言,受部分程序员青睐。 - **Turbo C Shell (tcsh)**:C Shell的增强版,优化了用户友好性和执行速度。 - **Korn Shell (ksh)**:对某些有UNIX经验的用户有吸引力,具有复杂的默认...

    gitsick:在没有符号链接的情况下将您的dotfile存储在Git中

    把gitsick在某处PATH和source gitsick.sh在你.bashrc 。 配置 您可以使用以下命令设置存储存储库的目录: git config --global gitsick.dir 默认值为$HOME/.gitsick 。 概要 gitsick init [NAME] gitsick clone ...

    simple_shell

    简单壳名称hsh-Alx Holberton简单Shell命令解释器(shell) 概要./hsh [命令] [参数...] 描述hsh (简单外壳)是Alx学生三个月期项目的结尾。 目的是编写一个与sh密切相关的简单UNIX命令解释器概述Shell是提供命令行...

    Linux、WAS相关安装与日常操作命令

    可以检查第435行的代码,通常是因为测试表达式中的语法错误。正确的写法应该是: ```bash version=${release%%\.*} if [[ $version -ge 5 ]] ``` 这样修改后可以解决此类问题。 #### FTP服务与SecureCRT连接...

    shell脚本编程最新版

    ### Shell脚本编程知识概要 Shell脚本编程是一项基础而又重要的技能,尤其在Linux系统管理和嵌入式开发中应用广泛。以下是从提供的文件内容中提炼出的知识点。 #### 预备知识 1. **Shell脚本语言概念**:Shell...

    Bash 新手指南.pdf

    - 学习正则表达式的概念和基本语法。 - 掌握使用Grep和其他工具进行文本搜索的方法。 #### 五、GNU SED流编辑器 **5.1 介绍** - **什么是sed?**: - SED是一个流编辑器,可以对文本文件进行批量修改。 - **sed...

    Bash Beginners Guide(中文版) - Machtelt Garrels

    - **概要**:了解如何在Bash环境中执行命令。 - **Shell内部命令**:如`cd`、`echo`等,这些命令是由shell本身解释执行的。 - **从脚本执行程序**:如何调用外部程序或脚本。 - **建立块**:Bash中的建立块指的...

    NMLT-PT16301

    【描述】描述部分同样简单,仅包含项目的名称"“NMLT-PT16301",这表明可能的详细信息如项目目标、内容概要或完成指南等都包含在压缩包内的文件中。为了深入理解这个项目,我们需要解压并查看NMLT-PT16301-master...

Global site tag (gtag.js) - Google Analytics