- shell是干嘛用的?
shell是一脚本语言,没有编译过程,不像Java等其他编程语言一样复杂,它面向的对象应该是服务器,为了运维人员方便管理服务器而去实现某些操作。而不是说用shell去写一个app,它没这个能耐。
shell变量
- 变量是任何一门编程语言不可少的组成部分,它用于存储数据。
- 通常脚本语言不需要声明变量的类型,直接赋值就可以了。
- 而在Bash中,变量的默认赋值都是一个字符串,无论你赋值的时候有没有加上引号,它都是当作字符串去存储。
- 变量名不能以数字开头,可以由数字字母下划线组成。
变量的分类
- 用户自定义的变量
变量名=变量值
(给变量赋值时,不要有空格,不然系统会一个你是在输入命名,所以会报命令找不到的错误)
$变量名或${变量名}
:调用变量值
set
:查看当前已定义的变量
set -u
:可以知道调用变量值时可以知道该变量是为空还是未定义
unset
:用于删除变量
sum=$var+$x
按道理应该输出10,结果输出的是5+5,这是因为变量赋值都当作是字符串,所以下面才有sum=$var$x
输出55
- 系统环境变量:主要保存和系统操作环境相关的数据,可自定义,但真正对系统生效的变量和作用是固定的。
环境变量和用户自定义变量的区别,环境变量是全局变量,用户自定义变量是局部变量
定义环境变量:
export 变量名=变量值
(声明并赋值)
变量名=变量值
export 变量名
(先赋值后声明)
env
:只查看环境变量用命令
$PATH
:系统查找命令的路径
其实我们平时使用的命令,按道理都是需要打路径下的可执行文件去执行的,但我们都不会这样去使用。
比如说ls
命令,按道理应该是/bin/ls
可是我们只是使用ls
就成功运行了该文件,为什么呢?
这是因为环境变量$PATH
的作用,当我们打出ls
时,它会在$PATH
里头存储的路径下去找对应的可执行文件
那么按照这个思路,我们可以把存放自己写的脚本那个文件目录放到$PATH
里头,那么我们就可以很轻松的去调用了
locale
:查询当前系统的语系LANG:定义系统主语系的变量,修改该值只是临时生效
/etc/sysconfig/i18n
:修改这个文件重启服务器后永久生效
- 预定义变量:变量名和该变量对于的作用都是固定的,不可自定义,位置参数变量也是预定义变量的一种
1.位置参数变量
$n
:n为数字,$0
代表命令本身,$1-$9
代表1到9的参数列表,大于或等于10的用用花括号包起来{$10}
$*
:代表命令行中的所有参数,把所有参数看作一个整体
$@
:代表命令行中的所有参数,把每个参数区分看待
$#
:代表命令行中的所有参数个数
求和可以使用
let
命令,如let sum=var1+var2
也可以使用
(())
,如sum=$((var1+var2)) 或 $(($var1+$var2))
使用
操作符[]
也可以这样sum=$[$var1+var2]
$*
与$@
的区别$*
被扩展为$1c$2c$3
等,其中c为IFS的第一个字符$@
被扩展为$1 $2 $3
等
$*看成一个整体,所以只循环了一次。$@把每个参数区分看待,所以循环了4次
2.预定义变量
$?
:最后一次执行命令的返回状态,0为正确执行,非0为错误执行$$
:当前进程的进程号 (PID)$!
:后台运行的最后一个进程的进程号
read变量:接收键盘输入
- -p:提示信息,等待输入时的提示信息
- -t:指导等待输入时间
- -n:指定接收的字符长度
- -s:隐藏输入内容,适用于密码输入之类,比如我们输入登录密码,输入时你是看不到你输入了什么