shell

shell

查看自己正在使用什么 shell:

echo $SHELL

将变量导出到环境变量:

HARLEY=cool
export HARLEY

没有简单的方法来区分 shell 变量和环境变量,使用大写可以使变量名突出。

显示环境变量

env
printenv

显示shell变量:

set

显示变量的值,没有歧义,就可以把花括号去掉。

echo ${ACTIVITY}ing
echo $ACTIVITY

当使用变量值的时候,使用花括号是一种好习惯,即便不是必需,这样做可以增强命令的可读性。

创建变量:

HARLEY=cool
WEEDLY="a cool cat"

修改变量的值:

HARLEY=smart

引用元字符最直接的方法,就是在元字符前面放一个反斜线\,下面这个命令,如果没有反斜线,那么 ; 解释成命令的末尾,然后 come 解释成一条新的命令:

echo It is warm and sunny\; come over and visit

使用双引号引用一串字符,但是保留$\``、` 的特殊含义。单引号是强引用,单引号内没有字符拥有有特殊的含义。

是不是内置命令

type command ...

history

fc -l
# c-shell
history

重新执行编号为 24 的:

fc -s 24
# c-shell
!24

重新执行上一条命令:

fc -s
!!

登录文件 .bash_profile.bash_login 或者 .profile (Bash POXIS),存放着每次登录时希望能够自动执行的命令。

环境文件 .bashrc,存放着所有希望在新 shell 启动时自动执行的命令。

注销文件 .bash_logout

rc 代表 run commands

标准输入

sort 程序期望用户从键盘(标准输入)输入数据,每次一行,很多时候也希望重定向标准输入,使其能够从文件中读取数据:

sort < names.txt

默认情况下,Unix 为每个进程提供3个预定义的文件描述符,0:标准输入,1:标准输出,2:标准错误。

command 0< inputfile
command 1> outputfile
command 2> errorfile

在 C-shell 中重定向标准错误:

command >& outputfile

正常错误和错误消息发送到一个文件中:

sort 1> output 2>&1

同时重定向标准输出和标准错误:

sort &> output
sort >& output

抛弃输出:

update > /dev/null
update 2> /dev/null
# 抛弃所有输出
update > /dev/null 2>&1

子 shell

在子 shell 中运行命令:

(command)

管道线分流

cat 的输出保存在 d1d2 文件中,同时 cat 的输出还管道传送给 grep

cat name1 name2 | tee d1 d2 | grep Harley
# -a 参数表示追加
cat name1 name2 | tee -a backup | grep Harley