Shell编程-03-Shell中的特殊变量和扩展变量 (2)

4、$_示例:

[root@localhost Test]# bash para.sh {a..z} a b c d e f g h i j k l m n o $0 is: para.sh $1 is: a $12 is: l $# is: 26 $* is: a b c d e f g h i j k l m n o p q r s t u v w x y z "$*"is: a b c d e f g h i j k l m n o p q r s t u v w x y z $@ is: a b c d e f g h i j k l m n o p q r s t u v w x y z "$@"is: a b c d e f g h i j k l m n o p q r s t u v w x y z [root@localhost Test]# echo $_ z # 打印最后一个传入的参数值 Bash 内置变量

    常用的内部命令有echo、eval、exec、export、read、shift、exit

echo

    主要用于打印信息,其命令格式如下所示:

echo [options] args

常用参数如下所示:

参数选项 说明
-n   不换行输出内容  
-e   解析转义字符  

echo常用转义字符如下:

转义字符 说明
\n   换行  
\r   回车  
\t   Tab  
\b   退格  
\v   纵向制表符  
eval

    当Shell程序运行到eval语句时,将读入参数args,并将它们组合成一个新的命令而后执行。其命令格式如下所示:

eval args exec

    exec主要用于在不创建新的子进程的情况下,转而执行指定的命令,当指定命令执行完后,则终止该进程。其命令格式如下所示:

exec args

当使用exec打开文件后,read命令每次都会将文件指针移动到下一行进行读取,直至结束。因此常用来处理文件内容。

read

    从标准输入读取变量或字符串等信息并传递给其他变量,其命令格式如下所示

read args shift

    对传入的位置参数依次向左移动一个位置,并使用位置参数$#减1,直至0为止。其命令格式如下所示:

shift postition args

shift如果不带参数,则默认左移1位
如传入的参数为$1 $2 $3,如执行一次shift,则之前的$3变成$2,$2变成$1,$1消失。

exit

    常用于退出Shell,在日常使用过程中可使用exit num来自定义返回状态数。

Bash 内置变量示例

1、echo

[root@localhost Test]# echo "Test";echo "Dao" Test Dao [root@localhost Test]# echo -n "Test";echo "Dao" TestDao [root@localhost Test]# echo -e "Test\tName\n Dao" Test Name Dao

2、eval

[root@localhost Test]# cat eval.sh #!/bin/bash echo "No eval" echo \$$# echo "Add eval" eval echo \$$# [root@localhost Test]# bash eval.sh a b No eval $2 # 未添加evel时,$#为2,则输出$2 Add eval b # 添加evel后,则重新对传入的参数进行解析,则输出传入的第2个参数

3、exec

[root@localhost Test]# exec ls eval.sh para.sh ping.sh testPID.sh testposition.sh [admin@localhost ~]$ # 在执行exec后则终止当前Shell进程,因此从root用户退出到普通用户 # 与read一起读取文件 [root@localhost ~]# seq 5 > /tmp/rand.log [root@localhost ~]# cat /tmp/rand.log 1 2 3 4 5 [root@localhost Test]# cat exec.sh #!/bin/bash exec < /tmp/rand.log while read line do echo $line done echo "Completed" [root@localhost Test]# bash exec.sh 1 2 3 4 5 Completed

4、read
可以参考公众号中read命令一文

5、shift

[root@localhost Test]# cat shift.sh #!/bin/bash echo $1 $2 $3 $4 $5 until [ -z $1 ] do echo $@ shift 1 done [root@localhost Test]# bash shift.sh {1..5} 1 2 3 4 5 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 变量扩展 变量扩展说明

    Shell中变量扩展说明如下所示:

${var}:返回${var}的内容

${#var}:返回${var}的字符长度

${var:offset}:返回${var}从位置offset之后开始提取字符至结束

${var:offset:length}:返回${var}从offset之后,提取长度为length的字符

${var#word}:返回从${var}开头开始删除最短匹配的word子符串

${var##word}:返回从${var}开头开始删除最长匹配的word子符串

${var%word}:返回从${var}结尾开始删除最短匹配的word子符串

${var%%word}:返回从${var}结尾开始删除最长匹配的word子符串

${var/oldstring/newstring}:使用newstring替换第一个匹配的字符oldstring

${var//oldstring/newstring}:使用newstring替换所有匹配的字符oldstring

${var:-word}:如果变量var的值为空或未赋值,则将word做为返回值,常用于防止变量为空或未定义而导致的异常

${var:=word}:如果变量var的值为空或未赋值,则将word赋值给var并返回其值。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywzzp.html