Linux shell语言

一.export
1.什么是export命令?
用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。

在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

2.为什么要用export命令?  
  为了是是我们定义一个变量时可以在子shell中被调用,而不需要重复去定义。
3.怎么使用export命令?
 解释:

  • Linux export命令用于设置或显示环境变量。
  • 在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。
PATH=xxx
export PATH

二.$符号的用法
shell中使用$符号来取一个变量的值,常见的就是$VAR,为了搞懂其它$#,$@,$0,$1,$2,$*,$$,$?的意义,我们可以写一个测试脚本运行下:

#! /bin/bash
VAR="Hello World!"
echo "\$VAR : $VAR"

echo "\$# argc: $#"
echo "\$@ argv[]: $@"
echo "\$0 argv[0]: $0"
echo "\$1 argv[1]: $1"
echo "\$2 argv[2]: $2"
echo "\$* argv_str: $*"
echo "\$$ pid: $$"
echo "\$? retcode: $?"

运行结果如下:

root@encoder:~# ./test a b c d
$VAR : Hello World!
$# argc: 4
$@ argv[]: a b c d
$0 argv[0]: ./test
$1 argv[1]: a
$2 argv[2]: b
$* argv_str: a b c d
$$ pid: 11700
$? retcode: 0

我在echo时做了下标注,意义应该很明显了

$# 代表传入参数的个数 
$@ 代表传入参数的列表 
$0 代表脚本本身 
$1 代表传入的第一个参数,$2,$3...以此类推 
$* 以字符串方式显示所有传入的参数 
$$ 脚本运行的进程ID 
$? 显示最后命令的退出状况,0表示没有错误

三.${var}
大家常见的变量形式都是$var,如

$ var=test 
$ echo $var 
test

但当你要显示变量值加随意的字符(我这里用AA)时,就会出错,如下:

$ echo $varAA
$

这时应该用变量的原形:${var},即是加一个大括号来限定变量名称的范围,如下

$ echo ${var}AA 
testAA 

四.${var:-string}和${var:=string}
若变量var为空或者未定义,则用在命令行中用string来替换
否则变量var不为空时,则用变量var的值来替换

[root@bogon ~]# echo $a

[root@bogon ~]# echo ${a:-bcc}
bcc
[root@bogon ~]# echo $a

[root@bogon ~]# a=ajax
[root@bogon ~]# echo ${a:-bcc}
ajax
[root@bogon ~]# unset a
[root@bogon ~]# echo $a

[root@bogon ~]# echo ${a:=bbc}
bbc
[root@bogon ~]# echo $a
bbc

发现$var为空时,把string赋值给了var
后者是一种赋值默认值的常见做法

五.${var:+string}
规则和上面的完全相反
即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量var的值,即空值

[root@bogon ~]# a=ajax
[root@bogon ~]# echo $a
ajax
[root@bogon ~]# echo ${a:+bbc}
bbc
[root@bogon ~]# echo $a
ajax
[root@bogon ~]# unset a
[root@bogon ~]# echo $a

[root@bogon ~]# echo ${a:+bbc}

[root@bogon ~]# 

六.linux 命令批量修改文件内容中某字段
1.perl命令替换
格式: perl -p -i -e “s/修改的字段/新字段/g” 文件名(别的路径下需加好路径)

perl -p -i -e "s/addr_book_strict = true/addr_book_strict = flase/g" config.toml

说明:将config.toml中的addr_book_strict = true替换成addr_book_strict = flase
另:如果想替换所有的txt文件可以用*.txt(perl -p -i -e “s/123/888/g” *.txt )

2.sed命令下批量替换文件内容
格式: sed -i “s/查找字段/替换字段/g” 路径` 文件名

sed -i "s/addr_book_strict = true/addr_book_strict = flase/g" ./node${i}_data/config/config.toml

说明:将config.toml中的addr_book_strict = true替换成addr_book_strict = flase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值