day01:初识shell
shell脚本:
linux的命令的集合,把多条可执行的命令集中存放在一个文本中,这个文本称之为shell脚本
包含基本的命令、变量、条件表达式、判断语句、循环语句等等
shel脚本规范(为自动化运维准备)
1.必须存放在统一的目录下
2.脚本的命名,最好见名知道其意思
3.脚本最好以.sh结尾
4.脚本第一行#!/bin/bash,指明解释器
5.添加注释信息
6.成对的语句、一次性写完,也就是说,框架搭好;比如for、while循环
变量的定义与调用
定义:变量名=变量值
例如:
url=www.baidu.com ##定义一个名为url的变量,变量值为www.baidu.com
调用:$变量名、${变量名}
例如:
[root@rhel3 ~]# echo $url ##输出变量url的值
www.baidu.com
变量值的定义
①数值的定义
num=100
②字符串的定义:最好使用双引号" "把字符串引起来
[root@rhel3 ~]# name="root"
[root@rhel3 ~]# echo $name
root
③命令的定义:把命令执行的结果赋值给变量
[root@rhel3 ~]# Time=`date +%F` ##使用反引号``解释命令。或者使用Time=$(date +%F)也可;看个人喜好
[root@rhel3 ~]# echo $Time
2019-12-11
=======================================
shell中的特殊变量
$0:代表脚本名、或者脚本的绝对路径;这个结果依据脚本怎样执行而定的
例如:
vim /server/scripts/day01.sh
#!/bin/bash
echo "\$0 is:" $0 ##测试$0
执行:
[root@rhel3 ~]# bash /server/scripts/day01.sh
$0 is: /server/scripts/day01.sh ##输出了脚本的绝对路径
$N:传递给脚本的第N个参数值,0被脚本名占用;所以从1开始,$1、$2....
例如:
vim /server/scripts/day01.sh
#!/bin/bash
##测试位置变量$N
echo "\$1 is:" $1
echo "\$2 is:" $2
执行:
[root@rhel3 ~]# bash /server/scripts/day01.sh 1 ##此处仅仅传递一个数值为1的参数,脚本接收该值、赋值给$1。没有接收到其余的值,$2自然为空
$1 is: 1
$2 is:
[root@rhel3 ~]# bash /server/scripts/day01.sh 1 2 ##按照标准输入,依次为位置变量赋值
$1 is: 1
$2 is: 2
[root@rhel3 ~]# bash /server/scripts/day01.sh 1 2 3 ##分别把1、2、3传递给脚本,脚本依次赋值给$1、$2、$3。此处没有输出3,是因为脚本没有调用$3,自然不会输出
$1 is: 1
$2 is: 2
$#:统计传递给脚本参数的总个数,经常判断使用、控制传递给脚本参数的个数
例如:
[root@rhel3 ~]# cat /server/scripts/day01.sh
#!/bin/bash
##测试变量$#
echo "传递过来的参数一共为:" $#
执行:
[root@rhel3 ~]# bash /server/scripts/day01.sh
传递过来的参数一共为: 0
[root@rhel3 ~]# bash /server/scripts/day01.sh 1 2 3
传递过来的参数一共为: 3
$?:上条shell命令执行的返回的结果;0为成功、非0为失败【经常做判断使用】
例如:
[root@rhel3 ~]# echo $?
0
[root@rhel3 ~]# ldlasda ##测试一个系统中没有的命令
-bash: ldlasda: 未找到命令
[root@rhel3 ~]# echo $?
127
$$:脚本执行进程id,也就是PID
总的代码
vim /server/scripts/day01.sh #!/bin/bash ##总测试 echo "正在执行的脚本是:" $0 echo "执行脚本的PID是:" $$ echo "第一个参数是:" $1 echo "第二个参数是:" $2 echo "传递过来的参数个数为:" $#
执行:
bash /server/scripts/day01.sh SMZ 20 正在执行的脚本是: /server/scripts/day01.sh 执行脚本的PID是: 1770 第一个参数是: SMZ 第二个参数是: 20 传递过来的参数个数为: 2
===========================================
read -p “提示信息” 变量名1 变量名2...
交互为变量赋值
把用户标准输入的值依次赋值给变量,存在多个变量的时候,变量与变量之间空格隔离开
当输入的值比变量多时,赋给最后一个变量的值不仅仅是一个字段,而是剩余的所有字段
当输入的值比变量少的时候,多余的变量为空值
例如:
vim /server/scripts/day01.sh #!/bin/bash ##测试read read -p "请输入你的名字:" Name read -p "请输入你的年龄:" Age echo "hello ${Name},your age is ${Age}"
执行:
[root@rhel3 ~]# bash /server/scripts/day01.sh 请输入你的名字:SMZ 请输入你的年龄:20 hello SMZ,your age is 20