马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.变量定义
变量定名规则:
- 可以包含字母,数字,下划线,首字母不能用数字开头,中间不能又空格;
- 为变量赋值等号之间不能为空格;
- 变量定名不能使用标点符号,不能使用bash的关键字;
- shell中默认的变量的类型都是字符,就算是数字字符也会被以为是字符串,如果必要举行字符相加,则必须指定变量为数值;
- 如果定义的变量中没有空格,则定义变量时可以使用单引号或双引号,也可以使用,如:name=zs,如果变量中包含了空格,则必须使用单引号或双引号引起来,如:"Kent Beck”;
- 可以使用命令的效果作为变量的值,但必须使用 `` 或 $() 符号,如: d=$(ls /etc) 获取etc目次下的所用文件赋给d;
- 情况变量一样平常用大写,编程习惯;
变量命令示例:
- # 以下时合法的变量名
- ABC
- ROOT__PATH
- _var
- var2
-
- # 以下时非法的变量名
- 12abc
- ?abc
复制代码
1.1.变量赋值
- # 显示负值
- name="zs" #正确
- name = "zs" #错误
- # 变量的使用
- echo $name
- echo ${name} #也可以这样写,花括号是可选的
- # 使用语句为变量赋值
- for f in $(ls /etc) # 将/etc目录下的所有文件循环赋给f变量
- for f in `ls /etc` # 这样写也可以
- # 变量可以重新定义
- name="ww"
- echo $name
- name="zl"
- echo $name
复制代码 双引号和单引号的区别?
- root@zking:~# var=1 2 3
- 2: command not found
- root@zking:~# VAR="1 2 3"
- root@zking:~# echo $VAR
- 1 2 3
- root@zking:~# VAR='1 2 3'
- root@zking:~# echo $VAR
- 1 2 3
- root@zking:~# ^C
- root@zking:~#
复制代码 在变量赋值时,如果值有空格,Shell 会把空格后面的字符串解释为命令。
看不出什么区别,再举个说明:
- root@zking:~# N=3
- root@zking:~# VAR="1 2 $N"
- root@zking:~# echo $VAR
- 1 2 3
复制代码 单引号是告诉 Shell 忽略特别字符,而双引号则解释特别符号原有的意义,比如$、!。
1.2.只读变量
- # 定义只读变量,该变量不能修改
- name="avdfd"
- readonly name
- # 运行时会提示该变量是只读变量
复制代码
1.3.删除变量
- # 删除name变量
- unset name
- # set可以查看所有的变量,包括环境变量和用户自定义的变量
- set
复制代码 删除只读
1.4.变量引用
Shell 中所有变量引用使用$符,后跟变量名。
- root@zking:~# VAR=123
- root@zking:~# echo $VAR
- 123
- root@zking:~# VAR+=456
- root@zking:~# echo $VAR
- 123456
复制代码 另有时候变量名与其他字符串紧碍着,也会误以为是整个变量:
- root@zking:~# VAR=123
- root@zking:~# echo $VAR
- 123
- root@zking:~# echo $VAR456
-
- root@zking:~# echo ${VAR}456
- 123456
复制代码 将命令效果作为变量值:
- root@zking:~# VAR=`echo 123`
- root@zking:~# echo $VAR
- 123
- root@zking:~# VAR=$(echo 123)
- root@zking:~# echo $VAR
- 123
复制代码
2.变量类型
- 自定义变量:用户自己定义的变量,或者叫作本地变量;
- 情况变量:生存和系统操纵情况相干的变量,可以添加情况变量;
- 位置变量:主要用于向脚本中通报参数或数据,变量名不能自定义,作用固定;
- 预定义变量:在Bash中已经定义好的变量,变量的作用也是预先定义好的;
2.1.自定义变量
用户自定义的变量也叫本地变量,只在定义它的当前shell中才也可以使用。
参考变量定义中的变量赋值即可。
2.2.情况变量
在命令行提示符直接执行 env、set 查察系统或情况变量。env体现用户情况变量,set体现Shell预先定义好的变量以及用户变量。可以通过 export 导出成用户变量。
可以明白为情况变量与本地变量的区别就是作用范围差别。
一些写 Shell 脚本时常用的系统变量:
变量说明$SHELL默认 Shell$HOME当前用户家目次$IFS内部字段分隔符$LANG默认语言$PATH默承认执行程序路径$PWD当前目次$UID当前用户 ID$USER当前用户$HISTSIZE汗青命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间$RANDOM随机生成一个 0 至 32767 的整数$HOSTNAME主机名
2.3.位置变量
位置变量指的是函数或脚本后跟的第 n 个参数。
参数说明$nn是数字,$0体现命令的本身,$1-9体现第1到第9个参数,10以上的参数必要用{}括起来,比方${10}$*体现命令行中的所有参数,$*把所有参数当作一个团体$@体现命令行中的所用参数,与$*差别的是$@把每个参数区分对待,可以将这个团体看作是一个数组,数组中的每个元素都是独立的$#代表命令行中所有参数的个数 示例一:
- root@zking:~# vim paramdemo.sh
-
- #!/bin/bash
- echo $0
- echo $1
- echo $2
- echo $3
-
- # 赋权
- root@zking:~# chmod 755 paramdemo.sh
- root@zking:~# ./paramdemo.sh 1 2 3 4
- ./paramdemo.sh
- 1
- 2
- 3
复制代码
示例二:
- root@zking:~# vim paramdemo.sh
-
- #!/bin/bash
- echo $0
- echo $1
- echo $2
- echo $3
-
- # 赋权
- root@zking:~# chmod 755 paramdemo.sh
- root@zking:~# ./paramdemo.sh 1 2 3 4
- ./paramdemo.sh
- 1
- 2
- 3
复制代码
2.4.预定义变量
参数说明$?最后一次执行命令的返回状态,如值为0则说明成功,如值为非0,则说明命令执行不正确$$当前进程的进程号$!后台运行的最后一个进程的进程号 示例一:
- root@zking:~# ls
- a.txt paramdemo02.sh paramdemo.sh snap workspace
- root@zking:~# echo $?
- 0
- root@zking:~# ls /fafaf
- ls: cannot access '/fafaf': No such file or directory
- root@zking:~#
- root@zking:~# echo $?
- 2
复制代码
3.键盘输入
read命令从标准输入读取,并把输入的内容复制给变量。
参数说明:
选项说明-p提示信息,等待输入时的提示-t秒数,用于指定等待的时间,单位时秒-n字符数,只要接收到指定的字符数就会执行-s隐藏输入的数据,用于秘密信息的输入,比如暗码 更多参数,请使用read -help查察。
示例一:
- root@zking:~# vim readdemo.sh
-
- #!/bin/bash
- read -t 60 -p "请输入账号: " userName
- echo "输入的账号是: $userName"
- read -s -t 60 -p "请输入密码:" password
- echo -e "\n"
- echo “输入的密码: $password”
- read -n 1 -t 30 -p "请选择[y/n]" select
- echo -e "\n"
- echo "输入的选择是: $select"
-
- root@zking:~# chmod 775 readdemo.sh
- root@zking:~# ./readdemo.sh
- 请输入账号: admin
- 输入的账号是: admin
- 请输入密码:
-
- “输入的密码: 1234”
- 请选择[y/n]y
-
- 输入的选择是: y
复制代码
4.数值运算
4.1.为什么数值必要特别处理
在shell中变量默认都是字符型的,不管是其字面值是不是数值,以是当两个变量相加时,默认是字符串拼接的操纵,比方:
- root@zking:~# num1=1
- root@zking:~# num2=2
- root@zking:~# num3=$num1+$num2
- root@zking:~# echo $num3
- 1+2
复制代码
4.2.声明变量类型
- 格式: declare [+/-][选项] 变量名
复制代码 参数说明:
参数说明-给变量设置类型属性+取消变量的类型属性,注意与我们的日常习惯差别-i将变量指定为整型-x将变量声明为情况变量-p体现指定变量被设置的类型 示例一:
- root@zking:~# num1=1
- root@zking:~# num2=2
- root@zking:~# num3=$num1+$num2
- root@zking:~# echo $num3
- 1+2# 此处是数值相加,而不是字符串相加了root@zking:~# declare -i num4=$num1+$num2root@zking:~# echo $num43
复制代码
4.3. expr或let数值运算工具
除了 Shell 本身的算数运算表达式,另有几个命令支持复杂的算数运算:
- root@zking:~# a=1
- root@zking:~# b=2
- root@zking:~# let c=$a+$b
- root@zking:~# echo $c
- 3
-
- # 注意空格问题
- root@zking:~# c=$(expr $a+$b)
- root@zking:~# echo $c
- 1+2
- root@zking:~# c=$(expr $a + $b)
- root@zking:~# echo $c
- 3
复制代码
4.4.$((表达式))或$[表达式]
- root@zking:~# a=5
- root@zking:~# b=6
- root@zking:~# c=$((a+b))
- root@zking:~# echo $c
- 11
- root@zking:~# b=8
- root@zking:~# a=9
- root@zking:~# c=$[a+b]
- root@zking:~# echo $c
- 17
复制代码
5.运算符
优先级运算符说明1=, +=, -=, *=, /=, %=, &=, ^=各种赋值2&&逻辑与3^按位异或4&按位与5==, !=即是,不即是6>, <, <=, >=大于,小于,大于即是,小于即是7>>, <<按位左移,按位右移8+, -加,减9*, /, %乘,除,取余10!, ~逻辑非,按位取反,或补码11-,+单目,正负运算符 优先级的数值越大,优先级越高,注意和其他语言的数值越低优先级越高差别。
- root@zking:~# num=$(((15+34)*5/2))
- root@zking:~# echo $num
- 122
- root@zking:~# b=$((19%2))
- root@zking:~# echo $b
- 1
- root@zking:~# c=$((1&&0))
- root@zking:~# echo $c
- 0
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |