shell中定义别名和函数

时间:2019-04-29 03:17:26  来源:igfitidea点击:

如何创建和使用别名或函数

别名命令 alias

别名是一项非常强大的函数,可用于系统shell程序中的所有用户。别名命令使你可以通过键入别名或定期发布的命令的缩写来启动命令或一系列命令。此函数使你可以创建自己的命令。别名函数内置在大多数shell(bash,csh和ksh)中。要记住的一个注意事项是,别名仅在创建它的shell程序中有效。以下是bash shell中的alias命令示例:

john@john-desktop:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

创建别名命令的基本语法是:

alias alias_name ='some command(s)'

如何显示Shell中已定义的所有别名:

alias

例如,别名 ll已创建。每当我执行命令 ll时,都会执行命令 ls -alF

管理员通常会为 rm命令创建一个别名:
alias rm ='rm -i'。为了安全起见,该别名将 -i参数添加到 rm命令中。(-i在删除文件之前要求确认)。

如果需要一个接一个地执行多个命令,则需要将命令放在单引号之间,并用 分号;分隔每个命令。在以下示例中,我创建了一个名为 bigf的别名命令。

使用shell如何查找linux目录中最大的10个文件

alias bigf='find . -type f -exec ls -s {} \; | sort -n -r | head -10'

在此示例中,我们使用别名 bigf在当前目录中查找文件,然后按大小列出该文件。然后将输出通过管道传递到分类中,以按数字顺序和相反的顺序进行分类。然后将此输出传递到head命令以显示前十行。

永久保留别名

尽管通过在命令行中键入alias命令来创建别名是创建命令快捷方式的一种简单方法。不幸的是,它不是永久的。以这种方式创建的别名条目仅在您当前的登录会话中有效。对于较大的系统(每天不重新启动系统),这可能是可以接受的;但是,在较小的系统上,如果您有很多别名,这可能会变得很乏味。要解决此问题,我们可以通过将别名条目添加到用户的 .bashrc文件中来使它永久化。该文件通常位于用户的的home目录。我的 .bashrc文件中的示例摘录:

# 启用ls的颜色支持,并添加方便的别名
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

系统范围内的别名

可以在基于Red Hat的系统下将系统范围的别名条目添加到 /etc/bashrc中。在Ubuntu下,此文件称为 /etc/bash.bashrc

删除别名条目-unalias命令

到目前为止,我们已经了解了如何快速创建别名,现在我们需要知道如何删除条目。要删除条目,我们使用unalias命令:

john@john-desktop:~$ alias
alias bigf='find . -type f -exec ls -s {} \; | sort -n -r | head -10'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

john@john-desktop:~$ unalias bigf

john@john-desktop:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

可以看到我们的 bigf别名已被删除。

Bash Shell中的函数

创建快捷方式或迷你例程的另一种流行方式是使用 函数。函数类似于使用alias命令的方式。最简单的形式是可以在命令行中创建函数:

john@john-desktop:~$ function myfunction() {
> ls -lF
> }
john@john-desktop:~$

在这个简单的函数示例中,我们创建了一个名为 myfunction()的函数。然后,我们使用 {打开命令部分,shell将自动期望输入更多信息。这就是为什么我们看到提示更改为继续提示 >的原因。输入我们希望执行的一个或多个命令后,我们以 }结尾。现在,当我们输入函数名称 myfunction时,将执行命令 ls -lF函数命令的主要用途之一是在脚本中创建函数。然后可以在整个脚本中调用它们,而无需代码复制。
以下是函数 myfunction的输出所产生的作用:

john@john-desktop:~$ myfunction
total 70828
drwxrwxr-x   2 john john     4096 Oct 22  2011 Audiobooks/
drwxrwxr-x   2 john john     4096 Jan 29 22:16 CentOS_iso_6.3/
drwxr-xr-x   2 john john     4096 Oct 22  2011 Desktop/
drwxr-xr-x  10 john john     4096 Feb 16 22:49 Documents/
drwxr-xr-x   3 john john     4096 Feb 17 21:56 Downloads/
-rw-r--r--   1 john john      179 Oct 22  2011 examples.desktop
drwxrwxr-x   4 john john     4096 Dec 14 20:36 Films/