- ">
- 1.用户自定义变量的规则
- 1.1将命令的返回值赋给变量
- 1.2.定义和取消定义变量
- 1.2.1查看所有变量命令set
- 1.2.3 取消定义变量 unset +变量名
- 1.3.定义静态变量
- 1.4双引号和单引号的区别
- 1.5 小括号,中括号,大括号的区别
- 1.6 变量值的叠加,很少用到,但要看得懂
- 1.7设置环境变量
- 1.7.1系统自带环境变量 ,
- 1.7.2 PS1 环境变量
- 1.8 LANG语系变量
- 2.位置参数变量
- 3.预定义变量
- 4.键盘接收read命令
- 5.declare 声明或者修改变量类型 —非常核心————————
- 6. 三种加减乘除符号以及括号的使用
- 7.变量的测试和内容置换,可以用来赋值使用,但不太容易想起来怎么使用
- 8.注释
1.用户自定义变量的规则
变量名称可以由字母,数字,下划线组成
但不能以数字开头,系统会识别不了数字开头的变量 例如 1name
等号两侧不能有空格
变量名称一般习惯为大写
1.1将命令的返回值赋给变量
把命令的结果作为变量值赋予变量,用 反引号
或者$()
1.$()形式
test=$(date)
echo $test
A=$(ls -la) 等价于反引号,赋值常用的格式还是这个 $() 形式
2.反引号形式
A=ls -la
反引号,运行里面的命令,把结果返回给变量A
1.2.定义和取消定义变量
name=qwe
name=”qwe asd” 不能有空格,如果有空格,需要用双引号带起来
A=”10 “ 定义变量
echo “A=$A”
1.2.1查看所有变量命令set
1.2.3 取消定义变量 unset +变量名
1.3.定义静态变量
静态变量不能unset掉
readonly A=99
echo “A=$A”
1.4双引号和单引号的区别
echo “$abc” 打印的是abc 的值
echo ‘$abc’ 打印的是$abc 本身 打印的就是普通字符串
反引号就是把值赋给变量,如果一个变量的值很长,可以用``括起来<br />echo
a`` 等于明确告诉linux系统,这个带反引号的是可以执行的。
echo “\$abc” 打印出来的是$abc, $的作用被\转义掉了
1.5 小括号,中括号,大括号的区别
bash有父子bash之分,在当前窗口中输入bash后,就进入到了子bash中
在小括号中的命令运行的同时会在父shell中自动开启一个子shell,结束后会自动退出子shell再返回到父shell中。
[root@kylin235 goldwind]# (ls;ll)
1.sh a.out DAFront_2 EMS-back
总用量 8
-rwxrwxrwx 1 root root 223 7月 19 18:08 1.sh
-rw-r--r-- 1 root root 0 8月 3 13:15 a.out
drwxr-xr-x 8 root root 4096 8月 5 16:13 DAFront_2
drwxr-xr-x 7 root root 303 8月 4 17:12 EMS-back
子shell中的值在父shell中是不生效的
[root@kylin235 goldwind]# name=qw
[root@kylin235 goldwind]# (name=ac)
[root@kylin235 goldwind]# (name=ac;echo $name)
ac
[root@kylin235 goldwind]# echo $name
qw
还是尽量不要用这种用法吧。。。。
echo “\$name” =echo ‘$name’ 反斜杠的作用是把特殊符号,特殊字符的作用去掉
1.6 变量值的叠加,很少用到,但要看得懂
用${变量名}+变量名
或者 PATH=$PATH:$HOME/bin 用双引号+$变量名
两种方法都不需要加空格
1.7设置环境变量
基本语法
1) export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
用export声明的环境变量就是环境变量
2) source 配置文件 (功能描述:让修改后的配置信息立即生效)
3) echo $变量名 (功能描述:查询环境变量的值)
系统环境变量可以在父子shell中生效
用户自定义环境变量只能在当前shell中生效\
1.7.1系统自带环境变量 ,
$HOME $PWD $SHELL $USER
显示当前系统中的shell所有变量
set | more
echo $PATH 系统查找命令的路径 如果把自己写的脚本放在这个路径下任意一个文件夹下,在命令行中输入脚本名就可以直接调用脚本了
新增一个环境变量的路径
PATH=”$PATH”:/root/sh
1.7.2 PS1 环境变量
echo $PS1
“ /$” 如果是root登录 就显示#号,如果是普通用户就显示$
‘PS1=xxxx ‘ 最外层是用单引号括起来的,这个要用登录机器实验看看是不是默认 单引号括起来的。
[root@214 EMS]# echo $PS1
[\u@\h \W]\$
1.8 LANG语系变量
2.位置参数变量
主要用来向脚本中传递参数或者数据的,变量名不能自定义,变量作用是固定的。
不被双引号(“ “)包含时,都以”$1” “$2” … “$n” 的形式输出所有参数。
$ echo “$“ “$*” 会将所有的参数作为一个整体,以”$1 $2 … $n”的形式输出所有参数;
$@ echo “$@” “$@” 会将各个参数分开,以”$1” “$2” … “$n” 的形式输出所有参数。
$n n为数字,$0表示命令本身 $1-$9 表示第一到第九个参数,10以上的参数需要用大括号包含 ,例如${10}
$# 表示命令行中所有参数的个数
# !/bin/bash
#获取到各个参数
echo "$0 $1 $2 ${10}"
#输出参数个数
echo "参数个数=$#"
3.预定义变量
系统中已经定义好的变量,变量名和作用都是固定的
基本介绍就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
echo +$xxx
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(FID) ),基本用不到
———————————
主要常用 $?
$? 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正
确执行﹔如果这个变量的值为非0(具体是哪个数,由命令自己来决定〉,则证明上一个命令执行不正确了。
这个命令可以用来判断上一个命令有没有执行成功
应用实例
在一个shell脚本中简单使用一下预定义变量
4.键盘接收read命令
read(选项)(参数)
-p指定读取值时的提示符
-t 指定读取值时的等待时间(秒),如果没有在指定的等待时间内输入就不等待了
-n 接收指定的字符数就开始执行
-s 隐藏输入的数据,适用于机密信息的输入
#读取控制台一个num值
#!/bin/bash
#把键盘输入的值赋给 NUM,把要被赋值的参数放在最后一个
read -p "请输入一个num=" NUM
echo "输入的值是$NUM"
#间隔10秒输入一个数
read -p -t 10"请输入一个num=" NUM1
echo "输入的值是$NUM1"
#!/bin/bash
read -t 30 -p "请输入第一个数:" N1
read -t 30 -p "请输入第二个数:" N2
sum=$[$N1+$N2]
echo "和是:"$sum
读取姓名和年龄
只有-e 才能识别隐藏内容 \n表示换行
5.declare 声明或者修改变量类型 —非常核心————————
-给变量设定类型属性
+取消变量的类型属性
shell中 变量的默认类型是字符串型,
把变量声明为整数型就可以运算
-i将变量声明为整数型 integer
declare -i c=$a+$b
-a 将变量声明为数组型
declare -x test=”123” 等于 export test=”123”
把变量声明为环境变量,和export作用一样,—-和export的区别就是 export是declare的简易写法,export声明一个环境变量,最终还是通过declare -x 把变量变成了环境变量
declare -p 会查询出很多声明的变量
declare -x 将变量声明为环境变量
declare -r 将变量声明为只读变量,一旦设置为只读变量,不能修改也不能删除,也不能通过+r取消只读属性,如果使用命令行声明的的,重启后就会消失。
6.shell数组
6. 三种加减乘除符号以及括号的使用
语法有几种形式
$((运算符)) 或者 $[运算符] 或者 expr m - n
中括号 还有判断的用途
[“$a” == “+”] 判断a的值是否等于 加号
expr 的运算符之间要有空格
expr * 表示乘法
expr / 表示除法
expr % 表示取余
#!/bin/bash
a=`expr 2 + 3`
echo $a
b1=`expr $1 + $2`
b=`expr $b1 \* 4`
echo "输入 2 3 两个参数,乘以4的积是"=$b
d=`expr $1 + $2`
echo "expr加法,输入2 3两个参数,和是" $d
f=$[(2+3)*4]
echo "中括号写法,积是"$f
e=$(((2+3)*4))
echo "小括号写法,积是"$e
输出
[root@kylin236 ~ 14:44:07]# ./1.sh 2 3
5
输入 2 3 两个参数,乘以4的积是=20
20
expr加法,输入2 3两个参数,和是 5
中括号写法,积是20
小括号写法,积是20
7.变量的测试和内容置换,可以用来赋值使用,但不太容易想起来怎么使用
检测 x的值,判断y有没有值。但实际上用起来是 如果y有值,则x等于多少。理解上有点相反。
大括号里的 - 是扛,不是减号。
第一行的使用方法是
如果则y不存在,那么x=新值;
如果y为空,那么x为空;
如果y是其他值,那么x就是其他值。
练习脚本1:
[root@kylin236 ~ 12:52:54]# vi 2.sh
#!/bin/bash
y=2
x=${y-3}
echo "当y存在,y不等于新值时,x="$x
y1=3
x1=${y-3}
echo "当y存在,y等于新值时,x="$x1
y2=""
x2=${y2-3}
echo "当y为空时,x也为空,x="$x2
y3="abc"
x3=${y3-4}
echo "当y等于abc,x也为abc,x="$x3
输出:
[root@kylin236 ~ 12:52:53]# ./2.sh
当y存在,y不等于新值时,x=2
当y存在,y等于新值时,x=2
当y为空时,x也为空,x=
当y等于abc,x也为abc,x=abc
练习脚本2:
y4
x4=${y4-4}
echo "当y等于abc,x也为abc,x="$x4
输出 当y等于abc,x也为abc,x=x4
在脚本中无法使用没有被声明值的变量,只能在命令行中使用
证明z从来没有设置过这个值,x的值就是新值,这里就是new
[root@kylin236 ~ 12:46:47]# x=${z-new}
[root@kylin236 ~ 12:46:59]# echo $x
new
8.注释
单行注释 #xxxx
多行注释
:<<!
asda
asda
asds
xx
!
以感叹号结尾