≡菜单

15个有用的Bash Shell内置命令(带有示例)

Bash随Shell一起提供了几个命令(即内置在bash Shell中)。

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

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

在本文中,让我们回顾一些有用的bash shell内置实例。

1. Bash导出命令示例

export command is used to export a 变种iable or function to the 环保ironment of all the child processes running in the current shell.

export 变种name=value
export -f functionname # exports a function in the current shell.

它导出带有值的变量或函数。“env” command lists all the 环保ironment 变种iables. In the following example, you can see that 环保 displays the exported 变种iable.

$ export country=India

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

“export -p” command also displays all the exported 变种iable in the current shell.

2. Bash eval命令示例

eval command combines all the given arguments and evaluates the combined expression and executes it, and returns the 出口 status of the executed command.

$ 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使用和混乱的顺序列出了进程。

注意: 本文是我们正在进行中的一部分 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命令用于将变量或函数标记为只读,无法进一步更改。

$ 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 变种iable

6.重击移位命令示例

转移命令用于将位置参数左移N次,并在移位后相应地重命名变量。

$ cat 转移.sh
#! /bin/bash

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

        -l) 回声"List command"
            ls
    	    转移
            ;;
	-p) 回声"Process command"
    	    ps -a
    	    转移
    	    ;;
	-t) 回声"Hash Table command"
    	    hash
    	    转移
    	    ;;
	-h) 回声"Help command"
    	    救命
    	    转移
	    ;;
	esac
done

$./shift.sh -l -t
List command 分析中断测试t1.sh temp Hash Table command
hits    command
   1    /usr/bin/ls

7. Bash测试命令示例

测试命令对条件表达式求值,并根据求值返回零或一。有关更多测试操作员,请参考bash的手册页。

#! /bin/bash

if test -z $1
then
       回声"位置参数\ $ 1为空"
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) 回声"救命 of $OPTARG"
             救命 "$OPTARG"
             ;;
          r) 回声"Going to remove a file $OPTARG"
             rm -f "$OPTARG"
            ;;
         埃萨克
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 上 ly.

9. Bash注销命令

Logout built in used to 出口 a current 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 thegeekstuff"
set -- $var
echo "\$1=" $1
echo "\$2=" $2
echo "\$3=" $3

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

12. Bash未设置命令示例

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

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

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

#unset the 变种iable
unset 变种
echo $var

$ ./unset.sh
welcome to thegeekstuff

在上面的示例中,取消设置变量后“var”将分配有空字符串。

13. Bash let命令示例

let commands is used to perform arithmetic operations 上 shell 变种iables.

$ 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选项。使用此命令,您可以利用外壳智能。

$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语句没有’t扩展转义序列。“l.”别名为当前目录的ls -l。在shell中禁用expand_aliases选项后,它没有’t扩展别名,您可能会注意到错误l。找不到命令。

15. Bash printf命令示例

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

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

在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

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 11 评论… 加一 }

  • 卡尔提加延 2010年8月3日,上午6:34

    不错的文章..

  • 坦美乔希 2010年8月4日,上午7:30

    不错的文章。
    我是一个初学者,正在尝试学习。可以请一个例子给我解释一下吗。我做了6’nt got how “分析中断测试t1.sh temp” will print.

    还有示例8。不确定$ OPTIND将在哪里使用。

  • 香塔努橡木 2010年8月13日,上午5:57

    感谢所有有用的提示。
    _____

    @tanmay为了理解示例6,请在结束案例之前添加以下代码“esac”

    *)回声“找不到$ 1的命令”
    回声“learn shell”
    转移
    出口
    ;;

    然后运行脚本
    sh 转移.sh -z -h

    第一个位置参数是“z” there is no match. So the loop will 出口.
    现在评论“exit”上面显示的代码行,然后再次运行相同的代码。现在它将移至下一个位置参数,即“-h”并运行相应的命令“help”

    添加-xv来调试类似的代码…
    sh -xv 转移.sh -z -h

    _____

    示例8中使用getopts解析不同的开关。例如命令“ls” has a switch like ‘l’ and ‘t’。我想您可以使用示例6中提到的方法执行相同的操作。

  • 香塔努橡木 2010年8月13日,上午6:17

    在示例7中使用了测试builitin,例如…
    如果测试-z $ 1
    我更喜欢
    如果[[-z $ 1]];

    那么为何不?
    [[-z $ 1]]&& 回声“位置参数\ $ 1为空”

    我不明白umask技巧10。

  • 坦美 2010年8月19日,上午6:52

    @Shantanu Thank you very much for your explanation. It really 救命ed me.

    -坦美

  • 拉杰库玛 2011年6月17日,下午12:32

    这篇文章真的很有用

  • 扎克里亚·卡齐 2012年4月27日,上午10:29

    事实证明,这篇文章非常有用。

  • vslapik 2012年10月31日,上午2:55

    eval示例包含错误:赋值变量为proccomm,eval执行procomm(其中一个‘c’在中间),该示例没有’t work …

  • 埃里克 2013年11月11日,晚上11:44

    我懂了“哈希:哈希表为空”每次我运行哈希
    当我跑步“set -o | grep hash”, it outputs “hashall on”,
    不要’不知道是什么问题。
    我尝试了不同的选项,结果始终是相同的。

    无论如何,很棒的文章。

  • 基兰 2015年1月18日,晚上10:48

    如前所述,getopts提供了两个变量$ OPTIND和$ OPTARG,它们分别具有下一个参数和选项参数的索引。

    但是如何在代码中解释您赋予$ OPTIND的原因呢?

  • 麦可 2015年4月6日,上午7:59

    我在终端命令行中添加了一个名为w3m的命令。我如何执行
    终点站?

发表评论