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 execexec主要用于在不创建新的子进程的情况下,转而执行指定的命令,当指定命令执行完后,则终止该进程。其命令格式如下所示:
exec args当使用exec打开文件后,read命令每次都会将文件指针移动到下一行进行读取,直至结束。因此常用来处理文件内容。
read从标准输入读取变量或字符串等信息并传递给其他变量,其命令格式如下所示
read args shift对传入的位置参数依次向左移动一个位置,并使用位置参数$#减1,直至0为止。其命令格式如下所示:
shift postition argsshift如果不带参数,则默认左移1位
如传入的参数为$1 $2 $3,如执行一次shift,则之前的$3变成$2,$2变成$1,$1消失。
常用于退出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 Dao2、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 Completed4、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并返回其值。