Shell变量

Shell支持三种类型的变量

  • 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写。
  • 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$3...$9
  • 预定义变量: 预定义的特殊变量,只能使用,不能修改

用户自定义变量

#定义变量:变量名=变量值, 可以使用"常量/其他变量/命令执行结果"赋值
var1='test var'
var2="test variable $var1"
var3=`date` #单引号中将$就当作$, 不识别$为特殊符号,不能引用起他变量
echo 'the price is $100' #双引号中可以通过$来引用变量,但无法解析转义符号,要解析转义符和字体格式需要在echo命令前加-e 参数
echo "test /n test"
echo -e "test /n test" #`` 反引号可以运行完其中的脚本命令然后赋值给相应的变量,如下执行结果会打印出123.sql的结果和当前日期
str=`cat 123.sql`
strdate=`date`
echo "$str $date` #使用变量:$变量名
echo "$var $var1" #变量后直接连接字符串需要用{}隔开使得变量可识别
echo "测试变量${var}test" # 清除变量
unset var1

位置变量

新建根据参数执行数据库命令脚本

#!/bin/bash
#mysql.sh conn="/usr/local/mysql/bin/mysql -uroot -p123" case $1 in
select)
sql="select * from test.user"
;;
delete)
sql="delete from test.user where id =$2"
;;
insert)
sql="insert into test.user(uname,psd) values('$2','$3')"
;;
update)
sql="update test.user set uname='$3', psd='$4' where id='$2'
;;
esac $conn -e "$sql"

运行脚本,以空格为分隔符输入不同个数的参数

#显示test数据库下user表的所有数据
./mysql.sh select
#删除指定id的用户
./mysql.sh delete 4
#插入新用户
./mysql.sh insert newuser newpsd
#更新id=2用户属性
./mysqlsh update 2 newuser2 newpsd2

预定义变量  

Shell脚本支持四种形式的预定义变量:

  • $#: 所有位置参数的个数
  • $*: 所有位置参数的内容
  • $0: 当前执行的脚本名(程序或者是进程名)
  • $?: 上一条命令执行的状态,为0代表执行成功,为其他数字(eg:127...)代表执行失败
!/bin/bash
#test pre-defined bash variable
echo "当前脚本的位置参数有${#}个"
echo "当前正在执行的脚本名称是: $0" if[ [ $? == ] ];then
echo "上条命令执行成功"
else
echo "上条命令执行失败"
fi for i in $*; do
echo "位置变量为 $i"
done

运算符

Shell是脚本语言,变量没有区分类型,程序在实际运行的时候根据上下文做类型判断,默认的类型是String,如果需要把变量看作Int类型来进行加减乘除运算,需要采用特殊语法。

  • $((变量1运算符1变量2运算符2变量3)) : 此种方式用的较多, eg: $((2+3+4)); $((2*3))
  • expr 变量1 运算符 变量2 运算符 变量3 :变量和运算符之间一定要用空格隔开,此种方法比较少用, 并且乘法要用转移\*, eg: expr 2 + 3 + 4; expr 2 \* 3

Shell常用运算符

  • /
  • %

最新文章

  1. 深入理解javascript原型和闭包系列
  2. iOS开发之CocoaLumberjack
  3. Verilog HDL那些事_建模篇笔记(实验八:键盘解码)
  4. iOS--------坐标系统(UIView的frame、bounds跟center属性)
  5. jquery删除数组中重复元素
  6. python 函数式编程工具
  7. oracle拼接字符串
  8. Nagios NSclient Failed to get CPU value: \238(_total)\6: Failed to get mutex :(
  9. VisualStudio如何以源码文本方式打开rc文件
  10. uva 10673 Play with Floor and Ceil
  11. Otto开发初探——微服务依赖管理新利器
  12. 简单的powershell 批量生成身份证复印件
  13. 深入理解Azure自动扩展集VMSS(2)
  14. 【Webpack的使用指南 01】Webpack入门
  15. 数据库-left join,right join,inner join,full join
  16. 一位资深Java架构师的晋级心得
  17. ES6 系列之 defineProperty 与 proxy
  18. mysql修改用户密码
  19. 关于购物车程序的Python实现
  20. 环境变量之path的一点理解

热门文章

  1. 梯度下降法VS随机梯度下降法 (Python的实现)
  2. Java面试宝典2015版
  3. 【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)
  4. SQL Server 字符串处理
  5. 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)
  6. SQL Server 中 RAISERROR 的用法
  7. Send to Kindle :一键推送网页内容到多看
  8. ubuntu安装jdk-6u45-linux-x64.bin___ZC_20160423
  9. 学习日记day 10 : JavaScript秋风扫落叶第一期
  10. Android中的启动模式(下)