登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 1088|回复: 0

Shell 教学:shell中$() $(())的用法

[复制链接]

 成长值: 35920

8169

主题

7094

帖子

6831

现金

黑狼创办人

Rank: 12Rank: 12Rank: 12

积分
6831
发表于 2017-10-22 19:57:46 | 显示全部楼层 |阅读模式 来自 美国

  • 在我们编写shell的时候会有这样一个种场景(${}的用法,因为标题头条不允许有{} ,所以标题未加。):
比如:我要备份passwd这个文件,备份到bak_path="/mnt/sql_bak/" 这个路径下。

且文件名为bak?

习惯上shell是这样:
#!/bin/sh

bak_path="/mnt/bak/"
cp $/etc/passwd $bak_pathbak
但是这样会发现$bak_pathbak 这个系统会把它作为一个变量名的,而不是根据上面变量,然后追加一个bak。实际上想解决这个问题有两种办法,一种 bak_path中最后不要加"/" 即 bak_path="/mnt/bak".
然后 cp $/etc/passwd $bak_path/bak 这样即可。第二种就是今天要说的 ${} 。bak_path="/mnt/bak" 路径还是这个。下面cp $/etc/passwd ${bak_path}bak 这样即可。
2.第二种场景 必须你shell中要对一个命令的结果做操作这时候就要用到$()
比如:我要对一个进程执行kill,我要关掉pid为1915这个tomcat

Wl19fFoV3cA4vV4w.jpg
首先我得先拿到这个pid。ps -ef|grep java|egrep -o "[1-9]{4}"|head -n1 ,然后kill -9 pid 即可。
一条命令就是 kill -9 $(ps -ef|grep java|egrep -o "[1-9]{4}"|head -n1)即可。
3.补充一种场景比如你要计算25*125等于多少 (类似计算器运算) windows用户会用calc调用系统计算器算。那linux呢 可以用echo $((25*125)) 就可以了。
4.另外关于${} 这个的用法不简单限制于 变量限制扩展的功能,可以还可以用来切分字符串
比如str="123" 我要取23,正向取就是 echo ${str:1:2} 意思是从第一位往后开始不包括第一位,取两位。

再比如str="abc" 取bc,一样 echo${str:1:2}
或者 echo ${str#*1} echo ${str#*a} 也可以。这个意思就是去掉1 左边包括1;去掉a包括a。跟上面的区别在于上面的 1,2 都是对应字符的下标,而后面这种方法是指定字符串
这里的#可以换成% 又是另一种结果,有兴趣可以查询下。




上一篇:shell基础(1) shell概述
下一篇:SHELL教学:awk或shell脚本统计日志文件中字母个数
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-14 20:10 , Processed in 0.059365 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表