变量的默认类型都是字符串型
。//即系统把全部值都看成字符串放到变量中,不论这个“字符串”其实是整数、浮点数等等。一、变量=值 e.g x=5 注意,变量名只能是字母、下划线、数字组成且不能以数字开头,=号左右不可有空格
二、""
会解析特殊符号,例如$
,''
不会解析特殊符号
三、引用变量:$变量名
例如:$x
四、全部变量默认的值都是字符串类型,不可作Math
运算。
五、变量叠加 e.g y="$x"123
或者 y=${x}123
六、查看变量 set
会列出系统中全部的变量,包括环境变量和自定义变量set -u
//设定当调用不存在变量时,会提示错误
七、删除变量 unset
变量名 例如:unset x 注意没有$。linux
环境变量是全局变量,用户自定义变量是局部变量。shell
用户自定义变量只在当前的 shell
中生效,环境变量在当前 shell
和这个 shell
的全部子 shell
中生效。centos
export 变量名=变量值
或数组
变量名=变量值 export 变量名
set 查看全部变量 env 查看环境变量
unset 环境名
HOSTNAME:主机名 SHELL:当前的 shell TERM:终端环境 HISTSIZE:历史命令条数 SSH_CLIENT:当前操做环境是用 ssh 链接的,这里记录客户端 ip SSH_TTY:ssh 链接的终端是 pts/1 USER:当前登陆的用户 PATH:系统搜索命令的路径
要想直接经过脚本名执行本身的脚本:
(1)将脚本拷贝至 PATH
中的任意目录下(不建议这样作),例如:cp hello.sh /bin/
(2)将脚本所在目录添加到 PATH 变量中
(变量叠加),例如:PATH="$PATH":/root/sh
,但系统重启后失效。bash
PS1:命令提示符设置ssh
\d:显示日期,格式为"星期 月 日" \H:显示完整的主机名 \t:显示 24 小时制时间,格式为"HH:MM:SS" \A:显示 24 小时制时间,格式为"HH:MM" \u:显示当前用户名 \w:显示当前所在目录的完整名称 \W:显示当前所在目录的最后一个目录 \$:提示符。root 用户为"#",普通用户为"$"
当前语系查询:locale
//直接生效的是LANG
变量(默认语系) LC_ALL
:定义总体语系(不经常使用)函数
echo $LANG //当前语系环境 echo $LC_ALL //总体语系环境
locale -a | more 查看Linux支持的全部语系环境 cat /etc/sysconfig/i18n //下次开机之后的系统环境 LANG=zh_CN.UTF-8 //切换成中文
$n:n 为数字,$0 表明命令自己,$1-$9 表明第一到第九个参数,十以上的参数须要用大括号包含,如 ${10}。 $*:这个变量表明命令行中全部的参数,$* 把全部的参数当作一个总体。 $@:这个变量也表明命令行中全部的参数,不过 $@ 把每一个参数区分对待。 $#:这个变量表明命令行中全部参数的个数。
例子1:测试
#!/bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) 变量 sum 的和是 num1 加 num2 echo $sum 打印变量 sum 的值
linux默认变量都是字符串,因此用两个((来进行运算。
执行脚本:
$ ./test.sh 45 76spa
例子2:命令行
#!/bin/bash echo "A total of $# parameters" #使用 $# 表明全部参数的个数 echo "The parameters is:$*" #使用 $* 表明全部的参数 echo "The parameters is:$@" #使用 $@ 表明全部的参数
执行脚本:
$ ./test.sh 11 22 33 44
例子3:$* 与 $@ 的区别
#!/bin/bash for i in "$*" # $* 中全部参数当作是一个总体,因此这个 for 循环只会循环一次 do echo "The parameters is:$i" done for y in "$@" # $@ 中每一个参数都当作是独立的,因此 $@ 中有几个参数,就会循环几回 do echo "Parameter:$y" done
前面说到的逻辑或:||
-->ls || echo yes
前面一条语句正确执行,才执行后一条语句。这里就是经过执行命令的返回值来判断。逻辑与:&&
--> ls qwe && echo no
也是一样的道理。
能够经过一个简单的shell来展现一下:
sl.sh:
#!/bin/bash ehco "dang qian de PID: $$" find / hello.sh & //&放入后台执行 echo "hou tai de PID: $!"
chmod 755 sl.sh
,而后再执行:./sl.sh
;能够获得当前的测试的结果
read -n read -p "please input name " name #-p表示输出提示信息 read [选项] 变量名 read -t 30 #-t 表示等待时间单位为秒 -t 30 表示30秒,若30秒后没有输入数据终止执行脚本 read -s #隐藏信息 echo -e "\n" 换行符
read.sh:
#!/bin/bash read -p "please input your name:" -t 30 name #等下输入,若是超过30秒不输入,就终止当前命令 echo $name read -p "please input your password:" -s pwd #输入的值是隐藏的,看不见的,可是在sh里面仍是能够获取到的,而且输出的 echo -e "/n" echo $pwd read -p "please input your sex [M/F]:" -n 1 sex #意思就是只能输入一个字符,且输入以后立马执行 echo -e "/n" echo $sex
chmod 755 read.sh
---> ./read.sh
Shell
变量弱类型,默认字符串变量。
declare [+/-][选项] 变量名
选项:
-
给变量设定类型属性+
取消变量的类型属性-a
将变量声明为数组型-i
将变量设定为整型(integer)-x
声明为环境变量-r
设置为只读属性-p
显示指定变量的被声明类型
定义数组:movie[0]=zp movie[1]=tp declare -a movie[2]=live
调用数组:echo ${movie}
表示调用第一个echo ${movie[1]}
表示调用第二个echo ${movie[*]}
表示显示数组中的全部元素
declare -x test =123
做用与export
相同。export
命令实际过程是调用declare
命令
列出系统中全部变量的类型:declare -p
aa=11 bb=22 declare -i cc=$aa+$bb
a=11 b=22 dd=$(expr $aa + $bb)
注:+
旁边必定要留空格。
gg=$(($aa+$bb)) //推荐该方法
或
gg=$[$aa+$bb]
注:$var=$(命令)
//先执行命令,而后再把结果给变量。gg=$(date)
//把系统函数输出值复制给gg
unset y x=${y-2} echo $x --> x=2 y="" --> 将y的值设为空值 x=${y-2} echo $x --> x= 空 y=1 x=${y-2} echo $x --> x=1
用户自定义变量(本地变量)
环境变量:定义每一个用户的操做环境, PATH PS1
eg:
echo $PS1 \[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\$
从新配置配置文件: source+配置文件
或者. 配置文件
eg :
[root@centos ~]# . .bashrc [root@centos ~]# source .bashrc
环境变量配置文件简介:
PATH HISTSIZE PS1 HOSTNAME
环境变量配置文件主要是定义对系统操做环境系统生效的系统默认的
环境变量
~
表明家目录,每一个用户都会有,家目录只是当前登陆用户生效。
放在etc
会对全部用户
起做用。
如下是关于登陆的5个环境变量配置文件。
/etc/profile /etc/profile.d/*.sh ~/.bash_profile ~/.bashrc /etc/bashrc