SHELL 的初识
一、SHELLD的介绍
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive).
Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。
二、shell的赋值
1).直接赋值,注意等号两边不能有空格,如赋值为数字则不需要""
[root@SHELL ~]# name="wo shi ni baba" [root@SHELL ~]# echo $name wo shi ni baba
2).输入赋值,read 后接变量名,回车后输入什么 变量值就是什么
[root@SHELL ~]# read name wo [root@SHELL ~]# echo $name wo
3).赋值等于变量,将一个变量的值赋予另一个变量,原变量更改值后,新变量不变
[root@SHELL ~]# name="baba" [root@SHELL ~]# name1="yeye" [root@SHELL ~]# echo $name baba [root@SHELL ~]# echo $name1 yeye [root@SHELL ~]# name=$name1 [root@SHELL ~]# echo $name yeye
[root@SHELL ~]# echo $name
yeye
[root@SHELL ~]# echo $name1
yeye
[root@SHELL ~]# name1="nainai"
[root@SHELL ~]# echo $name
yeye
[root@SHELL ~]# echo $name1
nainai
三、内置变量$
1)$0 返回值为执行的路径
[root@SHELL scripts]# pwd #创建一个路径专门放脚本 /server/scripts [root@SHELL scripts]# cat test.sh #!/bin/sh #from zhang echo $0 [root@SHELL scripts]# sh test.sh test.sh [root@SHELL scripts]# sh /server/scripts/test.sh /server/scripts/test.sh [root@SHELL scripts]#
2)$n 传参 外面传的参数 赋值给内部,位置一一对应
[root@SHELL scripts]# cat test.sh #!/bin/sh #from zhang echo $1 echo $2 echo $3 [root@SHELL scripts]# sh test.sh 1 2 3 1 2 3 [root@SHELL scripts]# sh test.sh a s d a s d [root@SHELL scripts]#
3)$# 统计变量值的字符串长度,包括空格
[root@SHELL scripts]# name="woshinibaba" [root@SHELL scripts]# echo $name woshinibaba [root@SHELL scripts]# echo ${name} woshinibaba [root@SHELL scripts]# echo ${#name} 11 [root@SHELL scripts]# name="wo shi ni baba" [root@SHELL scripts]# echo ${#name} 14 [root@SHELL scripts]#
4)$?返回脚本内命令执行是否正确,正确返回零 不正确返回任意数
[root@SHELL scripts]# cat test.sh #!/bin/sh #from zhang echo $0 echo $? teaa #未知的命令 echo $? [root@SHELL scripts]# sh test.sh test.sh 0 #上一条执行成功返回0 test.sh: line 5: teaa: command not found 127 #未知的命令 返回任意数 [root@SHELL scripts]#
5)$$ 获取脚本的PID
[root@SHELL scripts]# sh test.sh test.sh 0 test.sh: line 5: teaa: command not found 127 [root@SHELL scripts]# echo $$ > 1.txt [root@SHELL scripts]# cat 1.txt 2766 [root@SHELL scripts]# ps -ef | grep 2766 root 2766 2762 0 14:33 pts/0 00:00:00 -bash root 4622 2766 0 19:48 pts/0 00:00:00 grep 2766
四、变量的子串
1).切片,第一个数字表示从谁开始,第二个数字表示往后几个字符
[root@SHELL scripts]# name="wo shi ni baba"
[root@SHELL scripts]# echo $name
wo shi ni baba
[root@SHELL scripts]# echo ${name:0:2}
wo [root@SHELL scripts]# echo ${name:3:2} sh [root@SHELL scripts]# echo ${name:3:3} shi
2).变量子串匹配()
[root@SHELL scripts]# url=www.sine.com [root@SHELL scripts]# echo ${url#*.} #(#表示以谁开头 *数量贪婪,多个的意思 .表示 ".") sine.com [root@SHELL scripts]# echo ${url%.*} #(#表示以谁结尾 其余与上面一直 ) www.sine [root@SHELL scripts]#
3).变量子串的替换 /表示惰性匹配,//表示贪婪匹配
[root@SHELL scripts]# echo ${url} www.sine.com [root@SHELL scripts]# echo ${url/w/a} aww.sine.com [root@SHELL scripts]# echo ${url} www.sine.com [root@SHELL scripts]# echo ${url//w/a} aaa.sine.com [root@SHELL scripts]#