shell 基础

本文详细介绍了Shell中的管道、重定向、逻辑运算、变量使用、条件测试等核心概念,并提供了实际应用场景的例子。
  • 管道

    shell 中一个命令的输出交给另一个命令处理,它们之间联系就是通过管道传输的,方法很简单,就是在它们之间加一个 “|” 即可。

isstack@isstack-virtual-machine:~$ ps aux | grep httpd

isstack    3489  0.0  0.0  13620   940 pts/1    S+   15:58   0:00 grep --color=auto httpd

将ps 的输出交给 grep过滤。

  • 重定向

重定向输入: < ,从指定文件读取数据
重定向输出: >、>> ,将输出结果覆盖、添加到指定文件。(单个> 代表覆盖)。
标准错误输出:2>、2>> ,将错误信息覆盖、添加到指定文件。(shell 命令执行的结果可能会有错误发生,这些错误信息用2 来区别于正确输出)
混合输出:&>、&>>,将标准出书和错误信息一起覆盖、添加到指定文件。

添加和覆盖的区别在于用一个还是两个> 符号。

isstack@isstack-virtual-machine:~$ find arm > mess.txt

这个目录下有许多含arm 的文件,但是屏幕上不会任何输出,因为输出被重定向到mess.txt 中去了。其他重定向的命令基本差不多。

  • 命令间逻辑

逻辑与:&&
逻辑或:||
分隔命令: ;

这可以让命令之间根据逻辑关系来执行,&& 让它们先执行前面的命令,如果前面的命令执行成功会继续执行后面的命令,如果失败则不会再执行后面的命令。


  • 变量基础

变量定义直接:

变量名=内容

引用变量时在变量名前加 $ 符号。为了显眼可以加{},${变量名}。

  • 引用

时常会用到字符串,变量也是字符串组成,所以解析的时候就需要分辨到底是变量还是字符串。

双引号:允许引用、转义
单引号:禁止引用、转义
反撇号,或者$():解析这串字符为命令

比如变量PATH ,若是用双引号括起来,echo “$PATH” ,则会输出PATH的内容,单引号括起来则会输出$PATH 这个字符串,反撇号用于放置一个命令,用的时候会返回这个命令的结果而不是这个命令本身那串字符。

  • 变量参数

$? : 前一个命令的状态值,0为正常,非零异常
$0 :脚本自身的程序名
$1-$9:第一到第九个位置参数
\$* :命令行的所有位置参数的内容
\$#:命令行的位置参数的个数


  • Shell 运算

运算并不是shell的强项,它的用处不在于此,但是有时候还是会用到。

expr 数值 操作符 数值
eg: expr 22 + 33
55
$[ 数值 操作符 数值]
echo $[22 + 33]

  • 字符串处理

1.

两个命令:dirname、basename
前者获取一个包含路径的字符串的路径部分,后者获取这个字符串指示的文件。


isstack@isstack-virtualmachine:~\$VAR="/etc/httpd/conf/httpd.conf"
isstack@isstack-virtual-machine:~\$dirname \$VAR
/etc/httpd/conf
isstack@isstack-virtual-machine:~$basename \$VAR
httpd.conf

2.
也可以用expr表达式截取字符串
expr substr $VAR 起始地址 截取长度

isstack@isstack-virtual-machine:~$ var=helloworld
isstack@isstack-virtual-machine:~$ expr substr $var 2 5
ellow

3.
${VAR:起始地址:截取长度}

isstack@isstack-virtual-machine:~$ echo \${var:2:5}
ellow 

{var/old/new}
${var//old/new}

前者替换找到的第一个old字符串,后者会替换所有含old的字符串


  • 条件测试

-e:目标是否存在(exist)
-d:是否时目录(directory)
-f:是否是文件(file)

权限测试

-r:是否有读取权限
-w:是否有写入权限
-x:是否有可执行权限

有两个格式可选择:
1. test 条件表达式
2. [ 条件表达式 ]

[ -f "/etc/profile"] && echo YES
YES

整数值比较:

-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于

字符串匹配:

=:字符串相同
!=:字符串不同


  • 分支命令

if 语句

if  条件测试
    then 命令序列
elif 条件测试
    then 命令序列
    else 命令序列
fi

for语句

for 变量名 in 取值列表
do
    命令序列
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值