shell学习

1. $?有两种意思:

1. 单独的$?记录上一个程序的返回值。一般程序正常运行结束的返回值为0。

2. $?NAME:表示NAME有没有被set,如被set则值为1,否则为0.

2.$#VARIABLE: 表示VARIABLE有多少个元素。

$#argv即表示脚本执行时传入的参数个数。

$argv[1]表示传入的第一个参数。

$1也表示传入的第一个参数, 等效于$argv[1]。$n跟$argv[n]的区别在于,当n<$#argv时,$argv[n]会报错,而$n不会.

$#表示参数个数

$*等效于$argv

$@所有的argv。

$argv[1-2]等效于"$argv[1] $argv[2]"

$$:expands to the process number of the current shell. Since this process number is unique in the system it can be used in generation of unique temporary file names.

$<:下一行输入

 3.LOOP:

  commands

  goto LOOP

 4.文件比较运算符

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
filename1-nt filename2 如果 filename1比 filename2新,则为真
filename1-ot filename2 如果 filename1比 filename2旧,则为真
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真
-n string 如果 string长度非零,则为真
string1= string2 如果 string1与 string2相同,则为真
string1!= string2 如果 string1与 string2不同,则为真
算术比较运算符
num1-eq num2 等于
num1-ne num2 不等于
num1-lt num2 小于
num1-le num2 小于或等于
num1-gt num2 大于
num1-ge num2 大于或等于

5. eval:

eval会对后面的命令进行两遍扫描,第一次,执行变量替换,类似与C语言的宏替代,第二次,执行替换后的命令串。

eval $command; 首先扩展$command,然后执行该command。

6.source与./的区别

假如有脚本change.sh="cd ~",则source change.sh之后,当前目录变为~/,如果./change.sh,则当前目录不变。这是因为source是shell的内建命令,不用创建子进程,而./change.sh是外部命令,会创建子进程,改变目录的操作在子进程中完成了,但不会影响父进程。所以当需要改变当前shell的环境参数时,需要用source命令。

7.关于变量赋值

shell中的变量都是字符串类型,但只要字符串是数字,一样可以执行整数操作。

变量赋值“=”两边不能有空格。

$var其实是${var}的简写形式。

变量赋值有两种方式:1)var=1; 2)for var in 1 2 3;

双引号会发生变量替换,单引号不会。

export可以将变量输出到子进程,但不能影响到父进程。如果脚本是source执行的,则export会影响当前terminal的环境。

转载于:https://www.cnblogs.com/lybinger/p/6423254.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值