Bash shell :15 个好用的 Bash Shell 内置命令

举报
Tiamo_T 发表于 2022/03/20 17:20:24 2022/03/20
【摘要】 Bash 有几个shell 附带的命令(即内置在bash shell 中)。 当您执行内置命令时,bash shell 会立即执行它,而不调用任何其他程序。 Bash shell 内置命令比外部命令更快,因为外部命令通常派生出一个进程来执行它。

Bash 有几个shell 附带的命令(即内置在bash shell 中)。

当您执行内置命令时,bash shell 会立即执行它,而不调用任何其他程序。

Bash shell 内置命令比外部命令更快,因为外部命令通常派生出一个进程来执行它。

在本文中,让我们通过示例回顾一些有用的 bash shell 内置函数。

1. Bash 导出命令示例

export 命令用于将变量或函数导出到当前 shell 中运行的所有子进程的环境中。

export varname=value
export -f functionname # exports a function in the current shell.

它导出带有值的变量或函数。“env”命令列出所有环境变量。在以下示例中,您可以看到 env 显示导出的变量。

$ export country=India

$ env
SESSIONNAME=Console
country=India
_=/usr/bin/env

“export -p” 命令还显示当前 shell 中所有导出的变量。

2. Bash eval 命令示例

eval 命令组合所有给定的参数并评估组合表达式并执行它,并返回已执行命令的退出状态。

$ cat evalex.sh
if [ ! -z $1 ]
then
proccomm="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | grep $1"
else
proccomm="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu"
fi
eval $proccomm

上面的代码片段接受一个参数,它是 grep 命令的模式。这按 cpu 使用顺序列出了进程,并为命令行中给出的特定模式列出了 greps。

注意:本文是我们正在进行的Bash 教程系列的一部分。

3. Bash hash 命令示例

hash 命令维护一个哈希表,其中包含使用的命令的路径名。当您执行命令时,它会在变量 $PATH 中搜索命令。
但是如果该命令在哈希表中可用,它会从那里获取并执行它。哈希表维护迄今为止在该 shell 中使用的每个命令遇到的命中数。

$ hash
hits    command
   1    /usr/bin/cat
   2    /usr/bin/ps
   4    /usr/bin/ls

您可以使用 -d 选项从哈希表中删除特定命令,并使用 -r 选项重置完整的哈希表。

$ hash -d cat
$ hash
hits    command
   2    /usr/bin/ps
   4    /usr/bin/ls

4. Bash pwd 命令示例

pwd 是一个 shell 内置命令,用于打印当前工作目录。它基本上返回内置变量 ${PWD} 的值

$pwd
/home/sasikala/bash/exercises

$echo $PWD
/home/sasikala/bash/exercises

5. Bash readonly 命令示例

readonly 命令用于将变量或函数标记为只读,不能进一步更改。

$ cat readonly_ex.sh
#!/bin/bash
# Restricting an array as a readonly
readonly -a shells=("ksh" "bash" "sh" "csh" );
echo ${#shells[@]}

# Trying to  modify an array, it throws an error
shells[0]="gnu-bash"

echo ${shells[@]}

$ ./readonly_ex.sh
4
readonly_ex.sh: line 9: shells: readonly variable

6. Bash shift 命令示例

shift 命令用于将位置参数向左移动 N 次,并在移动后对变量进行相应的重命名。

$ cat shift.sh
#! /bin/bash

while [ $# -gt 0 ]
do
        case "$1" in

        -l) echo "List command"
            ls
    	    shift
            ;;
	-p) echo "Process command"
    	    ps -a
    	    shift
    	    ;;
	-t) echo "Hash Table command"
    	    hash
    	    shift
    	    ;;
	-h) echo "Help command"
    	    help
    	    shift
	    ;;
	esac
done

$./shift.sh -l -t
List command analysis  break  testing t1.sh temp Hash Table command
hits    command
   1    /usr/bin/ls

7. bash 测试命令示例

test 命令评估条件表达式并根据评估返回零或一。请参阅 bash 的手册页,了解更多测试运算符。

#! /bin/bash

if test -z $1
then
        echo "The positional parameter \$1 is empty"
fi

8. Bash getopts 命令示例

getopts 命令用于解析给定的命令行参数。我们可以定义选项的规则,即哪个选项接受参数,哪个不接受。在 getopts 命令中,如果一个选项后跟一个冒号,那么它需要该选项的参数。

getopts 提供了两个变量 $OPTIND 和 $OPTARG 分别具有下一个参数和选项参数的索引。

$ cat options.sh
#! /bin/bash

while getopts :h:r:l: OPTION
do
         case $OPTION in
          h) echo "help of $OPTARG"
             help "$OPTARG"
             ;;
          r) echo "Going to remove a file $OPTARG"
             rm -f "$OPTARG"
            ;;
         esac
done

$ ./options.sh -h jobs
help of jobs
jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

9.bash注销命令

内置注销用于退出当前 shell。

10. Bash umask 命令示例

umask 命令为当前进程设置文件模式创建掩码。当用户创建文件时,其默认权限基于 umask 中设置的值。文件的默认权限是 666,当用户创建文件时,它会被 umask 位屏蔽。

有关更多详细信息,请参阅我们的文章文件和目录权限

当用户创建文件时,666 被 022 屏蔽,因此默认文件权限为 644。

$ umask
0022

$ > temporary

$ ls -l temporary
-rw-r--r-- 1 root root 4 Jul 26 07:48 temporary

11. Bash set 命令示例

set 是一个shell 内置命令,用于设置和修改shell 的内部变量。不带参数的 set 命令列出所有变量及其值。set 命令还用于设置位置参数的值。

$ set +o history # To disable the history storing.
+o disables the given options.

$ set -o history
-o enables the history

$ cat set.sh
var="Welcome to tiamo"
set -- $var
echo "\$1=" $1
echo "\$2=" $2
echo "\$3=" $3

$ ./set.sh
$1=Welcome
$2=to
$3=tiamo

12. Bash unset 命令示例

unset 内置用于将 shell 变量设置为 null。unset 还用于删除数组的元素并删除完整的数组。

有关 Bash 数组的更多详细信息,请参阅我们之前的文章15 Bash 数组操作

$ cat unset.sh
#!/bin/bash
#Assign values and print it
var="welcome to tiamo"
echo $var

#unset the variable
unset var
echo $var

$ ./unset.sh
welcome to tiamo

在上面的例子中,取消设置后,变量“var”将被赋值为空字符串。

13. Bash let 命令示例

let 命令用于对 shell 变量执行算术运算。

$ cat arith.sh
#! /bin/bash

let arg1=12
let arg2=11

let add=$arg1+$arg2
let sub=$arg1-$arg2
let mul=$arg1*$arg2
let div=$arg1/$arg2
echo $add $sub $mul $div

$ ./arith.sh
23 1 132 1

14. Bash shopt 命令示例

shopt 内置命令用于设置和取消设置 shell 选项。使用此命令,您可以利用 shell 智能。

$cat shopt.sh
#! /bin/bash

## Before enabling xpg_echo
echo "WELCOME\n"
echo "GEEKSTUF\n"
shopt -s  xpg_echo
## After enabling xpg_echo
echo "WELCOME\n"
echo "GEEKSTUF\n"

# Before disabling aliases
alias l.='ls -l .'
l.

# After disabling aliases
shopt -u expand_aliases
l.

$ ./shopt.sh
WELCOME\n
GEEKSTUF\n
WELCOME

GEEKSTUF

total 3300
-rw------- 1 root root    1112 Jan 23  2009 anaconda-ks.cfg
-r-xr-xr-x 1 root root 3252304 Jul  1 08:25 backup
drwxr-xr-x 2 root root    4096 Jan 26  2009 Desktop
shopt.sh: line 17: l.: command not found

在启用 xpg_echo 选项之前,echo 语句没有扩展转义序列。“我。” 别名为当前目录的 ls -l。在 shell 中禁用 expand_aliases 选项后,它没有扩展别名,您可能会注意到错误 l。找不到命令。

15. Bash printf 命令示例

与 C 语言中的 printf 类似,bash printf 内置用于格式化打印操作。

在示例 13 中,脚本对两个输入进行算术运算。在该脚本而不是 echo 语句中,您可以使用 printf 语句来打印格式化输出,如下所示。

在 arith.sh 中,用此 printf 语句替换 echo 语句。

printf "Addition=%d\nSubtraction=%d\nMultiplication=%d\nDivision=%f\n" $add $sub $mul $div

$ ./arith.sh
Addition=23
Subtraction=1
Multiplication=132
Division=1.000000
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。