Bash shell :15 个好用的 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
- 点赞
- 收藏
- 关注作者
评论(0)