Shell简化管理员操作,系统管理;
什么是变量与变量分类
什么是变量:变量就是可以改变的量,是计算机内存单元,其中存放的值可以改变。变量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此他们十分有用。
变量的命名规则:有数字、字母、下划线组成,不可以用数字开头;变量名的长度不得超过255个字符;变量名在有效的范围内必须唯一的,Bash变量默认为字符型;
变量的分类:
1. 用户自定义变量:用户自定义的变量;
2. 环境变量:这种变量主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的;
3. 位置参数变量:这种变量主要是用来向脚本当中传递参数或者数据的,变量名不能自定义,变量作用是固定的
4. 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
变量的调用$
Set
Set –u
用户自定义变量
变量名=变量值 eg:x=5 name=”jie cao”
注:等号左右不能有空格;变量的赋值中有空格需要双引号;
变量的调用:使用”$”; eg: echo $变量名 echo $x
变量的叠加:eg:x=123 进行变量叠加 x=”$x”456或者x=${x}456
输出x=123456
unset x #删除变量
环境变量
环境变量尽量大写
环境变量与用户自定义变量的区别:
1. 用户自定义变量只在当前shell中生效;
2. 环境变量在当前shell和这个shell中的所有子shell中生效;
3. 环境变量是全局变量,而用户自定义变量是局部变量;
变量可以自定义,对系统生效的环境变量名和变量作用是固定的
设置环境变量:export 变量名=变量值或者变量名=变量值 + export 变量名
查看环境变量:set #查看所有变量
env #查看环境变量
常用环境变量
1. HOSTNAME: 主机名;
2. SHELL: 当前的shell;
3. TREM: 终端环境;
4. HISTSIZE: 历史命令条数;
5. SSH_CLIENT: 当前操作环境是用ssh连接,这里记录客户端ip;
6. SSH_TTY: ssh连接的终端是pts/1;
7. USER: 当前登录的用户;
PATH环境变量:
1. PATH变量:系统查找命令的路径;
2. Echo $PATH #查看PATH环境变量;
3. PATH=”PATH”:/root/sh #增加PATH变量的值
Eg:增加一个脚本到PATH环境变量中
vimhello.sh
cphello.sh /bin/
hello.sh#可以直接显示里面的内容
PS1环境变量
1. \d : 显示日期,格式为“星期月日”;
2. \H : 显示完整的主机名。如默认主机名“localhost.localmain”;
3. \t :显示24小时制时间,格式为:“HH:MM:SS”;
4. \A :显示24小时制时间,格式为:“HH:MM”;
5. \u :显示当前用户名;
6. \w :显示当前所在目录的完整名称;
7. \W:显示当前所在目录的最后一个目录;
8. \$ :提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”;
Eg:改一下环境变量,先查看PS1环境变量—echo $PS1
按照ps1的环境变量模式,进行参数修改:PS1=’[\u@\A \w]\$ ‘
当前语气查询
locale #查询当前系统语系
LANG :定义系统主语系的变量;
LC_ALL:定义整体语系的变量
命令:echo$LANG #查看系统当前语系
locale –a | more #查看Linux支持的所有语系
位置参数变量
1. $n :n为数字,$0代表本身,$1-$9代表第一到第九个参数,十个以上的参数需要用大括号包含,如${10};
Eg:canshu1.sh
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))#变量sum的和是num1加num2
echo$sum #打印出变量sum的值
命令:./canshu1.sh 11 22
运行结果为:33
2. $* :这个变量代表命令行中所有的参数,$*把所有的参宿看成一个整体;
3. $@: 这个变量也代表命令行中所有的参数,不过$@把每一个参数区分对待
4. $#: 这个变量代表命令行中的所有参数的个数;
Eg:canshu2.sh
#!/bin/bash
echo “A total of $# paramenters” #使用$#代表所有参数的个数
echo “The paramenters is : $*” #使用$*代表所有的参数
echo “The paramenters is :$@’ #使用$@代表所有参数;
命令:./canshu2.sh 11 22 33 44
输出结果:
A total of 4 paramenters
The paramenters is : 11 22 33 44
The paramenters is : 11 22 33 44
Eg: $*与$@的区别
touch canshu3.sh
#!/bin/bash
for i in “$*” # $*中的所有参数看成一个整体,所以这个for循环只会执行一次
do
echo“The parameters is: $i”
done
for y in “$@” #$@每个中的每个参数都看成独立的,所以“$@”中有几个参数就会循环几次
do
echo“parameter:$y”
done
命令:./canshu3.sh 1 2 3 4
输出结果:1 2 3 4
1
2
3
4
预定义变量
1. $? : 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执 行;如果这个变量的值非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
2. $$: 当前进程的进程号(PID);
Eg:命令ls
Echo$$
输出ls的进程号
3. $! : 后台运行的最后一个进程的进程号(PID)
接收键盘输入
read [选项][变量名]
-选项:
-p “提示信息”:在等待read输入时,输出提示信息;
-t 秒数 :read命令会一直等待用户输入,使用此选项可以指定等待时间;
-n 字符数: read命令只接受指定的字符数,就会执行
-s : 隐藏输入的数据,适合用于机密信息的输入
Eg:touchbl.sh
#!/bin/bash
read –p “please input your name : “ –t 30 name #等待用户30s的输入时间
echo $name
read –p “please input your passwd: “ –s passwd #不显示输入的信息
echo –e “\n” # 换行
read –p “please input your sex[M/F]: “ –n 1 sex #输入一个字符后脚本就继续向下执行