今天是远程办公的第4天,渐渐的找到了一点在家办公的节奏了,改了几个shell脚本,在改动过程中,发现还有一些知识点需要巩固,这里写出来,加深下印象。

   关于$符号,大家肯定都不陌生,在shell脚本中,$的作用还是比较大多的,这里将所有的$组合都列出来,大家可以看下效果。

   $组成的命令大概有下面几个:

$0,$1...$"htmlcode">

jwfyyzdembp:tmp jwfyyz$ cat test.sh
echo '$0的含义是':$0
echo '$1的含义是':$1
jwfyyzdembp:tmp jwfyyz$ ./test.sh yeyz
$0的含义是:./test.sh
$1的含义是:yeyz
jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz
$0的含义是:test.sh
$1的含义是:yeyz

   需要注意一点,当使用./test.sh的方法来运行脚本的时候,$0的值是./test.sh,而不是test.sh

2.$"htmlcode">

jwfyyzdembp:tmp jwfyyz$ cat test.sh 
echo '$0的含义是':$0
echo '$1的含义是':$1
ls -l a.txt
echo '$"htmlcode">
jwfyyzdembp:tmp jwfyyz$ cat test.sh 
pwd
echo $$
sleep 10

jwfyyzdembp:tmp jwfyyz$ sh test.sh &
[1] 60658

jwfyyzdembp:tmp jwfyyz$ ps -ef|grep test
 501 60658 60529 0 8:36下午 ttys000 0:00.01 sh test.sh
 501 60661 60529 0 8:36下午 ttys000 0:00.00 grep test

   我们在test.sh脚本后面设置了sleep 10的命令,脚本运行完会睡眠10s,脚本中打印出来了值60658,此时我们查看当前脚本的进程号,发现子进程的进程id是60658

4.$*和$@

  这两个放在一起,主要是因为他们都代表引用的所有参数,单独打印出来结果,都是一样的,但是循环打印他们的内容,则会看出区别,举例如下:

jwfyyzdembp:tmp jwfyyz$ cat test.sh 
echo '$*的结果是':$*
echo '$@的结果是':$@
echo "-- \$* 演示 ---"
for i in "$*"; do
 echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
 echo $i
done

jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3
$*的结果是:yeyz 1 2 3
$@的结果是:yeyz 1 2 3
-- $* 演示 ---
yeyz 1 2 3
-- $@ 演示 ---
yeyz
1
2
3

   可以看到,循环打印的时候,$@ 

5.$#

  $#容易理解,它的意思是参数的个数。举例:

jwfyyzdembp:tmp jwfyyz$ cat test.sh 
echo '$*的结果是':$*
echo '$@的结果是':$@
echo '$#的结果是':$#

jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3
$*的结果是:yeyz 1 2 3
$@的结果是:yeyz 1 2 3
$#的结果是:4

6.$!

  该命令是显示shell脚本中上一个后台执行命令的进程id号,如下:

jwfyyzdembp:tmp jwfyyz$ cat test.sh 
echo '$*的结果是':$*
echo '$@的结果是':$@
echo '$#的结果是':$#
sleep 10 &
echo '$!的结果是':$!
sleep 10

jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3 &
[1] 61237
$*的结果是:yeyz 1 2 3
$@的结果是:yeyz 1 2 3
$#的结果是:4
$!的结果是:61238

jwfyyzdembp:tmp jwfyyz$ ps -ef|grep sleep
 501 61238 61237 0 9:12下午 ttys000 0:00.00 sleep 10
 501 61239 61237 0 9:12下午 ttys000 0:00.00 sleep 10
 501 61241 60529 0 9:12下午 ttys000 0:00.00 grep sleep

  在test.sh中,我们使用了sleep 10这样的命令在后台执行,然后我们可以看到,$!返回的值是61238,当我们ps -ef命令去查询进程信息的时候,可以看到,61238这个进程对应的命令就是sleep 10,注意和$$区分开来,$$反应的是当前脚本执行的进程号,$!反应的是脚本中某个命令的进程号。

以上就是shell脚本中$符号的使用示例的详细内容,更多关于shell $的资料请关注其它相关文章!

标签:
shell,$,shell,$命令

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“shell脚本中$符号的命令使用汇总”
暂无“shell脚本中$符号的命令使用汇总”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。