linux shell学习笔记(二) 变量和运算符
1、什么是shell变量?本地变量、环境变量、变量替换(显示变量)、位置变量、标准变量、特殊变量、影响变量的命令
2、本地变量:本地变量在用户现在的shell生命期的脚本中使用
variable-name=value
set显示本地所有的变量
readonly variable-name
例子:
LOCALTEST="test"
echo ${LOCALTEST}
readonly LOCALTEST
设置了readonly之后不能对变量进行改变,要谨慎使用
readonly命令,查看当前制度的变量
3、环境变量用于所有用户进程(经常称为子进程)。登陆进程称为父进程。shell中执行的用户进程称为子进程。不像本地变量(只用于现在的shell)环境变量可用于所有子进程,这包括编辑器、脚本和应用。
$HOME/.bash_profile(/etc/profile)
export(设置环境变量)
env(查看环境变量)
4、变量替换:用变量的值替换它的名字。echo
在变量名前加$,使用echo命令可以显示单个变量取值
例:testvar="this is a test"
echo ${testvar}
${Variable name} 显示实际值到variable name
${Variable name:+value} 如果设置了variable name,则显示其值value,否则,为空
${Variable name:?value} 如果未设置variable name,显示用户定义错误信息value
${Variable name:-value} 如果未设置variable name,则显示其值value
${Variable name:=value} 如果未设置variable name,设置其职,并显示
unset:unset variable-name(变量清除)
5、位置变量
位置变量表示$0,$1......$9(共10个,超出10个用其他方法)
向脚本中使用位置参数(find / -name $1 print)
向系统命令传递参数
6、标准变量
bash默认建立了一些标准环境变量,可在/etc/profile中定义(EXINIT(定义vi)、HOME(定义主目录)、IFS(定义linux字符之间用什么分割,理论上可以修改为任意字符)、LOGNAME、、MAIL(当前用户的存储邮箱)、MAILCHECK(每隔多少秒检查是否有邮件)、MAILPATH(有多个邮箱的地址,用:分隔)、TERM(终端类型)、PATH(可执行文件的寻找目录,用:分割)、TZ(时区)、PS1(登陆后,输入命令前端文字的设置)、PS2、PWD(当前目录)、SHELL(当前运行的是那个shell)、MANPATH(帮助手册存放)、TERMINFO(终端类型的配置信息))
7、特殊变量
$#(传递到脚本的参数个数)
$*(以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个)
$$(脚本运行的当前进程ID号)
$!(后台运行的最后一个进程的进程ID号)
$@(与$#相同,但是使用时加引号,并在引号中返回每个参数)
$-(显示shell使用的当前选项,与set命令功能相同)
$?(显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
8、影响变量的命令
declare 设置或显示变量
-f 只显示函数名
-r 创建只读变量(declare和typeset)
-x 创建转出变量
-i 创建整数变量
使用+替代-,可以颠倒选项的含义
export 用于创建传给子shell的变量
-- 表明选项结束,所有后续参数都是实参
-f 表明在"名-值"对中的名字是函数名
-n 把全局变量转换成局部变量。换句话说,命令的变量不再传给shell
-p 显示全局变量列表
readonly 用于显示或设置只读变量
-- 表明选项结束
-f 创建只读变量
set 设置或重设各种shell
shift [n] 用于移动位置变量,调整位置变量,使$3的值赋予$2,$2的值赋予$1
typeset 用于显示或设置变量
是declare的同义词
unset 用于取消变量的定义
-- 表明选项结束
-f 删除只读变量,但不能取消从shell环境中删除指定的变量和函数。如PATH,PS1,PS2,PPID,UID,EUID等的设置。
9、引用的必要性
变量和替换操作,在脚本中执行变量替换时最容易犯的一个错误就是引用错误
使用双引号可引用除字符$、`、\外的任意字符或字符串
10、单引号
单引号与双引号类似,不同的是shell会忽略任何引用值。换句话说,如果屏蔽了其特殊含义,会将引号里的所有字符,包括引号都作为一个字符串
11、反引号
反引号用于设置系统命令的输出到变量,shell将反引号中的内容作为一个系统命令,并执行其内容。
12、反斜杠
如果一个字符有特殊含义,反斜杠防止shell误解其含义,即屏蔽其特殊含义
下述字符包含有特殊意义:& * + ^ $ ` " | ?
13、运算符
运算符是对计算机发的指令
运算对象:数字、字符(字面值)、变量、表达式
表达式:运算符和运算对象的组合体
14、按位运算符
~ << >> & | ^
$[ ]表示形式告诉shell对方括号中的表达式求值
位运算符 说明
~op1 反运算符,把op1中所有的二进制为1的变为0,0变为1
op1<<op2 左移运算符,把op1中的二进制位向左移动op2位,忽略最左端移出的各位,最右端 的各位补上0值,每做一次按位左移就有实现op1乘以2
op1>>op2 右移运算符,把op1中的二进制向右移动op2位,忽略最右端移出的各位,最左端的 各位补上0值,每做一次按位左移就有实现op1除以2
op1&op2 与比较运算符,op1和op2对应位,对于每个二进制位来说,如果两者该位都是1,则 结果为1,否则结果为0
op1~op2 异或运算符,比较op1和op2的对应位,对于每个二进制位来说,如果两者该位互 补,则结果为1,否则,结果为0
op1|op2 或运算符,比较op1和op2的对应位,对于每个二进制位来说,如果两者该位有一个 是1或者都是1,则结果位为1,否则,结果位为0
15、逻辑运算符 (&& || == !=)
16、赋值运算符(=、+=、-=、*=、/=、%=、^=、|=、<<=、>>=)
let $count = $count + $change
let $count + = $change
17、表达式替换
$[]和$(( )):习惯使用$[ ],所有shell的求值都是用整数完成
$[ ]可以接受不同基数的数字:[base#n]n表示基数从2到36的任何基数
例:echo $[10#8+1]表示8进制的10加1
转载于:https://blog.51cto.com/7200921/1333553
linux shell学习笔记(二) 变量和运算符相关推荐
- Bash Shell学习笔记二
1.||.&& 和&.|的区别 ||和&&的执行是从左到右,而&和|的执行是两边到中间的(未实际测试,只能确认它不是按顺序执行的) ||和&&a ...
- Linux shell 学习笔记(4)— linux 环境变量(全局变量、局部变量及变量持久化)
1. 环境变量概念及分类 bash shell 用一个叫作环境变量(environment variable)的特性来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因).这项 ...
- Linux | Shell 学习笔记(二)Shell 流程控制 if、case、for、while| read读取输入 | 函数的使用 | cut、sed、awk、sort命令 +Demo
文章目录 参考资料 运行环境 一.流程控制 1.1 if 判断 1.2 case 语句 1.3 for 循环 1.4 while 循环 二. read 读取控制台输入 三.函数 3.1 系统函数 ba ...
- Linux shell 学习笔记(7)— 构建基本脚本(变量、重定向、管道、状态码)
1. 使用多个命令 如果要两个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. $ date ; who Mon Feb 21 15:36:09 EST 2014 Christine tty2 ...
- Linux shell 学习笔记(16)— shell 入门总结
1. Shell 变量 Shell 变量包括自定义变量和环境变量: 自定义变量:脚本中自己命名定义的变量,通常为局部变量,其他 Shell 程序不能访问到: 环境变量,操作系统已定义的变量,如 PAT ...
- Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务
1. 处理信号 1.1 Linux 信号 常见的 Linux 信号如下表所示: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL ...
- Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)
1. 命令行参数 向 shell 脚本传递数据的最基本方法是使用命令行参数.命令行参数允许在运行脚本时向命令行添加数据. $ ./addem 10 30 本例向脚本 addem 传递了两个命令行参数( ...
- linux Shell学习笔记第五天
第五天:函数与任务调度 函数的优势 分而治之f 协同合作 方便管理 维护简单 函数的结构 function 函数名() { 命令1 命令2 命令3 } 函数的参数传递 向函数传递参数就像在一般脚本中使 ...
- Shell学习笔记 - 环境变量配置文件(转)
一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件 或 . 配置文件 2. 命令示例 [root@localhost ~]# sou ...
最新文章
- 新数学丛书《连分数》 习题 3.2
- layer iframe层的使用,传参
- SpringData ElasticSearch入门案例
- linux升级tls,为CentOS升级OpenSSL 让Nginx支持TLS 1.2
- 数据光端机设备性能指标介绍
- 聊聊Spring家族中的那几百个注解
- linux 扫描开放的端口命令,如何在 Linux 中检查(扫描)开放端口
- 华为m2青春版刷机android6,华为揽阅M2青春版线刷刷机教程_揽阅M2 LTE版救砖rom刷机包...
- mysql 合并同类项_使用Excel处理交易数据同一ID下的多条交易记录
- 传智博客JAVA基础第二十三天
- 花园 洛谷p1357
- WSL2 通过 USBIP 连接USB串口设备 JetsonUSB备份刷机
- 教程篇:《基础模块2》金蝶K3WISE15.0-注册套打教程
- python汽车租赁程序_python数据分析实例:共享单车租用影响因素探索
- 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
- 基于Python的微信朋友圈数据可视化分析之个性签名
- RabbitMQ与Erlang的版本对应关系
- win10 网络突然连不上,解决办法
- 两个优惠券CSS样式
- (四)生产者消费者模式
热门文章
- 蓝宝石显卡bios_这操作竟能让显卡性能暴涨?原来不是黑科技,小白都会
- 人工智能可控核聚变量子计算机,中国终于实现了可控核聚变
- docx文档怎么排列图片_“胶水语言”办公自动化Word篇——使用Python编辑和读取Word文档
- 计算机竞赛湖北有哪些,我校29名学生在全国大学生数学竞赛湖北赛区获奖
- Hibernate VS iBATIS
- 属格-my father's car和whose_32
- 如何在电话中交谈_11
- 用python语言模拟微信红包_python 模拟微信抢红包 基础语法实现demo
- python server酱_Python 超简单的邮件发送方法
- 2017.4.27 道路游戏 思考记录