- ">

- 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 />echoa`` 等于明确告诉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.outdrwxr-xr-x 8 root root 4096 8月 5 16:13 DAFront_2drwxr-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 $nameqw
还是尽量不要用这种用法吧。。。。
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=" NUMecho "输入的值是$NUM"#间隔10秒输入一个数read -p -t 10"请输入一个num=" NUM1echo "输入的值是$NUM1"
#!/bin/bashread -t 30 -p "请输入第一个数:" N1read -t 30 -p "请输入第二个数:" N2sum=$[$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/basha=`expr 2 + 3`echo $ab1=`expr $1 + $2`b=`expr $b1 \* 4`echo "输入 2 3 两个参数,乘以4的积是"=$bd=`expr $1 + $2`echo "expr加法,输入2 3两个参数,和是" $df=$[(2+3)*4]echo "中括号写法,积是"$fe=$(((2+3)*4))echo "小括号写法,积是"$e输出[root@kylin236 ~ 14:44:07]# ./1.sh 2 35输入 2 3 两个参数,乘以4的积是=2020expr加法,输入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/bashy=2x=${y-3}echo "当y存在,y不等于新值时,x="$xy1=3x1=${y-3}echo "当y存在,y等于新值时,x="$x1y2=""x2=${y2-3}echo "当y为空时,x也为空,x="$x2y3="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:y4x4=${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 $xnew
8.注释
单行注释 #xxxx
多行注释
:<<!
asda
asda
asds
xx
!
以感叹号结尾
