3.基本shell功能

本系列文章均翻译自Bash官方文档:Bash Manual,github同步项目:question

3.2 shell命令

3.2.4 复合命令

3.2.4.1 循环结构

note:不论;出现在命令语法的何处,都可能会被一行或多行代替。

  • until
  • while
  • for
for name [ [in [words …] ] ; ] do commands; done

展开words,并对结果中的每个成员执行一次命令。如果in words没有填写,为每个位置参数执行一次命令,就像$@被指定了 see Special Parameters

另外一种格式:???

for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
3.2.4.2 条件结构
  • if
    if test-commands; then
      consequent-commands;
    [elif more-test-commands; then
      more-consequents;]
    [else alternate-consequents;]
    fi
  • case
case word in [ [(] pattern [| pattern]…) command-list ;;]… esac

执行pattern匹配到word的命令组。patterns与相关的command-list一起被称作clause
每个clause必须以三种符号结束:;;,;&,;;&。例:

    echo -n "Enter the name of an animal: "
    read ANIMAL
    echo -n "The $ANIMAL has "
    case $ANIMAL in
      horse | dog | cat) echo -n "four";;
      man | kangaroo ) echo -n "two";;
      *) echo -n "an unknown number of";;
    esac
    echo " legs."

如果使用;;结束,那么匹配到第一个clause后即停止,不会向后继续匹配。使用;;&可达到相反的效果。使用;&则会导致继续执行下一个clause。如果没有匹配则返回0,否则返回执行命令的退出状态。

  • select
  • ((…))
  • [[…]]
3.2.4.3 组命令

Bash提供了两种方式来将一组命令作为一个整体来执行。当命令被组所包括时,重定向可能会应用到整个命令列表中。

  • ():(list),以小括号的方式包围命令会创建一个子shell环境,每个命令会在子shell中执行。
  • {}:{list},以花括号的方式包围命令会在当前shell的上下文中执行listlist中的命令需要以换行或者分号隔开。

3.3 shell 函数

语法:

name () compound-command [ redirections ]

or

function name [()] compound-command [ redirections ]

函数体compound-command,参见Compound Commands

例:

as_fn_append () { eval $[1]=\$$[1]\$[2]; }

3.4

3.4.2 特殊参数

不允许赋值。使用$引用。

  • *:从第一个开始展开成位置参数。
  • @:从第一个开始展开成位置参数。
  • #:参数数量。
  • ?:最近的管道执行的退出状态。
  • -:调用时指定的当前选项标志。
  • $:shell进程ID。在一个()子shell中,扩展为调用shell,而不是子shell。
  • !:最近别放在后台运行的job的ID,不论是异步命令或者使用的bg
  • 0:shell的名字或者shell脚本的名字。
  • _:在shell开始的时候,被设置为绝对路径用于:当被传递给环境或者参数列表中时,调用正在被执行的shell或shell脚本。

3.5 shell扩展

3.5.2 shell参数扩展

特殊情况:如果parameter的第一个字符是!,那么它不是nameref,而是变量级别的指令。该变量的值由其余参数组成。称作indirect expansion

parameter:变量名。*@会作用到每个成员上面。正则表达式参考see Filename Expansion

包括冒号则会测试参数的存在且值非空,省略冒号只测试参数是否存在。

  • ${parameter:-word} - 如果parameter未设置或为null,替换word的扩展。否则替换参数的值。
  • ${parameter:=word} - 如果parameter未设置或为null,word的扩展被分配给参数。然后parameter的值被替换。位置参数与特殊参数不能使用这种形式。
  • ${parameter:?word} - 如果parameter未设置或为null,word的扩展(或者是word不存在发出的信息)被写入标准错误和shell中,如果不是交互式的shell,则退出。否则替换参数的值。
  • ${parameter:+word} - 如果parameter未设置或为null,没有东西被替换。否则word的扩展被替换。
  ${with_fontconfig:-no}
  • ${#parameter} - parameter的长度。如果是数组:下标为数字时,长度为1;下标是* or @时,长度是元素的数量。
  • ${parameter#word} word是一个正则表达式。匹配的是parameter的头部,匹配到的字符串从parameter中删除。最短匹配规则。
  • ${parameter##word} - 最长匹配规则。
  • ${parameter%word} - 匹配的是parameter的尾部,匹配到的字符串从parameter中删除。最短匹配规则。
  • ${parameter%%word} - 最长匹配规则。
  • ${parameter/pattern/string} - 将pattern匹配到的字符串用string代替。最长匹配规则。
    • 如果pattern/开始,所有的匹配都会被替换;正常情况下只有第一个会被替换。
    • #开始,匹配头部
    • %开始,匹配尾部
    • 如果string是空的,匹配到的会被删掉
    [root@vdsm-dev home]# echo ${str}
    abcdefgaabdd
    [root@vdsm-dev home]# echo ${str/a/ss}
    ssbcdefgaabdd
    [root@vdsm-dev home]# echo ${str//a/ss}
    ssbcdefgssssbdd
    [root@vdsm-dev home]# echo ${str//a/}
    bcdefgbdd
  • ${parameter^pattern} - 匹配字母字符,pattern应该只匹配一个字符。如果pattern为空,匹配所有的字符。小写转大写,匹配第一个字符。
  • ${parameter^^pattern} - 匹配所有的字符。
  • ${parameter,pattern} - 大写转小写,匹配第一个字符。
  • ${parameter,pattern} - 匹配所有的字符。
  [root@vdsm-dev home]# echo ${str}
  abcdefgaabdd
  [root@vdsm-dev home]# echo ${str^a}
  Abcdefgaabdd
  [root@vdsm-dev home]# echo ${str^^}
  ABCDEFGAABDD

3.5.8 文件名扩展

3.5.8.1 正则匹配

反斜杠用于转义下面这些特殊字符,来使他们变成字面上的意思。

  • * - 匹配任何字符串,包括空串。shell选项globstar可用时,*在一个文件名扩展内容中使用,**作为一个单一的正则会匹配所有的文件和文件夹及其子文件夹。如果后跟/**只匹配文件夹和子文件夹。
  • ? - 匹配任何单个字符。
  • […] - 匹配任何封装的字符串。以!^开头时,表示不匹配。-表示范围表达式。
  • ?(pattern-list) - 0次或1次匹配。
  • *(pattern-list) - 0次或多次匹配。
  • +(pattern-list) - 1次或多次匹配。
  • @(pattern-list) - 1次匹配。
  • !(pattern-list) - 不匹配。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kingdee.bos.client.shell是金蝶软件的一款客户端壳程序。它是金蝶企业管理软件BOS(Business Operating System)的一部分,用于提供统一的用户界面和承载各种功能模块。 Kingdee.bos.client.shell具有以下特点和作用: 1. 统一界面:Kingdee.bos.client.shell为不同功能模块提供了统一的用户界面,使得用户在不同模块之间切换更加便捷,减少了学习成本。 2. 模块承载:Kingdee.bos.client.shell作为一个客户端壳程序,可以承载不同的功能模块,比如会计、人力资源、采购等。用户可以通过点击对应的功能模块,进入相应的界面进行相关业务处理。 3. 接口统一:Kingdee.bos.client.shell提供了对外的接口,方便第三方开发者进行定制化扩展。通过这些接口,用户可以集成其他系统,并与金蝶软件进行数据交互。 4. 安全性:Kingdee.bos.client.shell具备安全防护机制,包括用户权限管理、数据加密等。用户可以根据不同的角色和权限进行操作,保障了企业数据的安全性。 5. 用户体验:Kingdee.bos.client.shell通过良好的用户体验设计,提供了友好的操作界面,简化了用户的操作流程,提高了工作效率。 综上所述,Kingdee.bos.client.shell是金蝶软件BOS系统中的一个重要组成部分,通过统一界面、模块承载、接口统一、安全性和用户体验等特点,为用户提供便捷高效的企业管理解决方案。 ### 回答2: kingdee.bos.client.shell 是金蝶软件的一种用户界面,用于提供用户与金蝶软件系统进行交互的工具。它是金蝶企业管理软件BOS(Business Operation System)的客户端核心组件之一。 在金蝶软件系统中,用户通过kingdee.bos.client.shell 可以方便地登录到系统,并进行各类业务操作。它提供了一个友好的界面,用户可以通过它访问各个模块、功能和应用程序。用户可以通过kingdee.bos.client.shell 进行数据查询、新增、修改、删除等操作,以及查看各种业务报表和统计数据。 kingdee.bos.client.shell 还具有很多实用的功能。例如,它可以嵌入其他辅助工具和插件,提供更多的扩展和定制功能。它还支持多语言界面,可以根据用户的需求设置不同的语言环境。此外,它还提供了一些个性化配置选项,用户可以根据自己的喜好和使用习惯进行设置。 总之,kingdee.bos.client.shell 是金蝶软件系统的一部分,为用户提供了一个便捷、易用的操作平台。它具有丰富的功能和灵活的配置选项,可以满足用户在日常工作中的各种需求。 ### 回答3: kingdee.bos.client.shell是金蝶集团开发的一款企业管理软件,用于企业的业务处理和信息管理。它是一种桌面客户端应用程序,用户可以通过它来实现企业内部的各项业务操作。 首先,kingdee.bos.client.shell提供了一些基本功能模块,包括人事管理、财务管理、采购管理、销售管理等。企业可以根据自身的需求选择安装和使用这些模块,以实现企业各个方面的管理。 其次,该软件提供了友好的用户界面,使得企业用户能够方便地进行操作。用户可以通过该软件进行数据的输入、查询、修改和删除等操作,从而实现业务的有效管理和监控。 另外,kingdee.bos.client.shell还支持多人同时操作,可以实现多用户的协同工作。这样,企业内部的各个部门和人员可以通过该软件进行信息共享和协作,从而提高工作效率和减少沟通成本。 此外,该软件还提供了一些高级功能,比如报表生成、数据分析和业务流程管理等。企业用户可以通过这些功能对企业的运营情况进行全面的分析和评估,从而做出合理的决策和规划。 总之,kingdee.bos.client.shell是一款功能全面、易于操作的企业管理软件,它可以帮助企业实现各项业务的高效处理和管理。通过使用该软件,企业可以提高工作效率、降低成本,并且更好地掌握企业的运营情况,从而为企业的发展提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值