shell
1.1、变量(中点)
-
变量的含义
a. 什么是量
量就是数据.
b. 什么是变量
数据可以发生改变就是变量.
在一个脚本周期内,其值可以发生改变的量就是变量.
c. 什么叫做一个脚本周期
一个脚本周期我们可以简单的理解为当前的shell文件
变量是shell中不可或缺的一部分,也是最基础、最重要的组成部分。
1.2、变量的定义与使用
-
变量,先定义后使用。
定义形如:a=10
使用形如:echo $a
变量就是由2部分组成,一个是变量名(左边),另外一部分是变量的值(右边)
变量名和变量值是什么关系??
变量名和变量值是使用和被使用关系; 我们的变量名来使用变量值;
在使用变量的时候一定需要在变量名前面添加一个$符号
-
变量名的规范
变量名的规范 注意,变量名后面的等号左右不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线“_”。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。
[root@tedu ~]# a=10 #创建变量并赋值 [root@tedu ~]# echo a a [root@tedu ~]# echo $a #查看变量值 10 [root@tedu ~]# a=1000 [root@tedu ~]# echo $a 1000
优化
[root@tedu ~]# vim /root/user4.sh #!/bin/bash a=xiaolan #定义一个变量 useradd $a echo 用户$a成功 echo 123 | passwd --stdin $a &> /dev/null echo 用户$a密码设置成功 [root@tedu ~]# chmod +x /root/user4.sh [root@tedu ~]# /root/user4.sh 用户xiaolan成功 用户xiaolan密码设置成功
关于单双引号的问题:
双引号能够识别变量,双引号能够实现转义(类似于“\*”)
单引号是不能识别变量,只会原样输出,单引号是不能转义的
[root@tedu ~]# vim test.sh #!/bin/bash dt=`date + '%F %T'` echo $dt
注意:反引号(esc键下方的那个键),当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”。
-
变量的种类
环境变量:变量名一般都是大写,用来设置用户/系统环境
由系统定义完成,并且赋值完成
常见的环境变量
PWD:记录当前所在工作目录
PATH:记录搜索可执行程序的默认目录范围
USER:记录当前用户名
LOGNAME:记录当前用户的登录名
SHELL:记录当前用户登录Shell
HOME:记录当前用户家目录位置
USER=用来存放当前用户系统的登录名
[root@tedu ~]# echo $USER #显示当前登陆的身份
PATH=提供命令搜索的路径
[root@tedu ~]# echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
[root@tedu ~]# mkdir /code [root@tedu ~]# cd /code/ [root@tedu code]# vim hello.sh #!/bin/bash echo I Love You 小美 [root@tedu code]# chmod +x hello.sh [root@tedu code]# /code/hello.sh I Love You 小美 [root@tedu code]# hello.sh bash: hello.sh: 未找到命令... [root@tedu code]# cp /code/hello.sh /usr/bin/hello.sh [root@tedu code]# hello.sh I Love You 小美
-
位置变量
在执行脚本时提供的命令行参数:非交互式传递命令行参数
-表示为$n,n为序号
$1,$2,....${10},${11},...
(命令完成的组成:命令字,选项,参数 cat -n /root/hello.sh)
[root@tedu ~]# /root/user5.sh xiaobei 这个用户名并不是通过交互式来修改的、还是直接写在了我们的参数里面 [root@tedu ~]# /root/user5.sh xiaob xiaon xiaod xiaox [root@tedu ~]# vim /root/test.sh #!/bin/bash echo $1 echo $2 echo $3 [root@tedu ~]# chmod +x /root/test.sh [root@tedu ~]# /root/test.sh xiaob xiaon xiaox xiaob xiaon xiaox
再次修改代码
[root@tedu ~]# vim user5.sh #!/bin/bash #read -p '请您输入要要创建的用户名:' a useradd $1 echo 用户$1创建成功 echo 123 | passwd --stdin $1 &> /dev/null echo 用户$1密码设置成功 [root@tedu ~]# /root/user5.sh xiaob 用户xiaob创建成功 用户xiaob密码设置成功 [root@tedu ~]# /root/user5.sh xiaon 用户xiaon创建成功 用户xiaon密码设置成功 [root@tedu ~]# /root/user5.sh xiaox 用户xiaox创建成功 用户xiaox密码设置成功 [root@tedu ~]#
小案例
[root@tedu ~]# vim /root/mycat.sh #!/bin/bash cat -n $1 [root@tedu ~]# chmod +x /root/mycat.sh [root@tedu ~]# /root/mycat.sh /root/user5.sh 1 #!/bin/bash 2 #read -p '请您输入要要创建的用户名:' a 3 useradd $1 4 echo 用户$1创建成功 5 echo 123 | passwd --stdin $1 &> /dev/null 6 echo 用户$1密码设置成功
修改案例
[root@tedu ~]# vim /root/mycat.sh #!/bin/bash cat -n $1 | head -$2 [root@tedu ~]# /root/mycat.sh /root/user5.sh 5
-
预定义变量
用来保存脚本的执行信息
$0:当前所在的进程或脚本名
$$:当前运行进程的PID号
$?:程序退出后的状态值,0表示正常,其他值异常
$#:已加载的位置变量的个数
$*:所有位置变量的值 直接使用这些变量
不能直接为这些变量赋值
$#以加载的位置变量个数
$?程序退出后的状态值,0表示正常,其他值异常
[root@tedu ~]# vim /root/test.sh #!/bin/bash echo $1 echo $2 echo $3 echo $# [root@tedu ~]# chmod +x /root/test.sh [root@tedu ~]# /root/test.sh a b c 脚本二 [root@tedu ~]# vim /root/test1.sh #!/bin/bash echo 您一共输入了$#个参数 [root@tedu ~]# chmod +x /root/test1.sh [root@tedu ~]# /root/test1.sh a b c jjj 您一共输入了4个参数 [root@tedu ~]# useradd laowang [root@tedu ~]# echo $? 0 [root@tedu ~]# useradd laowang useradd:用户“laowang”已存在 [root@tedu ~]# echo $? 9