shell编程(4)---Bash变量

20 篇文章 0 订阅

shell   和 bash 是一个意思。

 

 1 bash 变量的概述

  

  shell 是脚本语言 ,不需要提前编译,在执行的过程中编译,所见即所得。

            php  ,java主要用来实现功能,语言函数等多且复杂

           shell 是用来简化系统管理操作 ,例如 添加一万个用户,如果采用useradd  手工添加太........,可以采用shell 脚本,批量添加

 

 

 

2 bash 变量与 变量的分类   

 

 

  2.1  什么是变量 与变量的分类 

 

  变量命名规则:  

 

        变量名必须以字母或下划线大头,名字中间只能以  数字,字母,下划线 组成;

         变量名的长度不得超过255个字符;

        变量名在有效的范围内 必须是唯一的;

       在Bash中 变量的默认类型都是字符串型;

 

 在任何 系统 中 ,目录名  ,文件名,变量名都要有含义。

 

 

变量按照 存储数据分类:

 

        字符串;   整数; 浮点数;日期;

 

 

 

shell 中变量分类: 

                      用户自定义变量,变量自定义的; 

                      环境变量,这种变量中保存的是主要和系统环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是国定的;

                      位置参数变量,这种变量主要是用来向脚本中传递参数或数据的,变量名不能自定义,变量作用是固定的;

                      预定义变量,是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的;

 

 

 

  2.2 用户自定义变量

 

 

      变量的定义 

                              x=5;  name=“jie cao ”

 


 

[root@aliyun247 ~]# x=5

[root@aliyun247 ~]# name ="dddd"

-bash: name: command not found

[root@aliyun247 ~]# name="dddd"

 

    变量的调用 

 

              echo   $5

           

              echo  $name


 

[root@aliyun247 ~]# echo 5

5

[root@aliyun247 ~]# echo x

x

[root@aliyun247 ~]# echo $x

5

[root@aliyun247 ~]# echo $name

dddd

 

     变量的叠加  

                   x=${x}789


 [root@aliyun247 ~]# x=${x}789

[root@aliyun247 ~]# echo $x

5789

[root@aliyun247 ~]# x="$x"1234

-bash: 51234: command not found

[root@aliyun247 ~]# echo "$x"12345

512345

 

 

      变量的查看 

                    set  

                           选项 -u     如果设定此选项,调用未声明变量时会报错(默认无任何提示)

 

[root@aliyun247 ~]# echo $a

 

[root@aliyun247 ~]# set -u

[root@aliyun247 ~]# echo $a

-bash: a: unbound variable

                             

 

   

 删除变量 

 

    unset

[root@aliyun247 ~]# unset x

[root@aliyun247 ~]# unset  name

 

 

 

   2.3 环境变量

 

 

环境变量与用户自定义变量的区别?

 

   环境变量是全局变量,用户自定义变量是局部变量。

  自定义变量 只在当前bash 环境生效, 环境变量在父bash ,子bash 中都生效。

 

 

 

哪些是环境变量??

    对系统生效的环境变量名和变量作用是固定的

 

 

 

设置环境变量:

    export     变量名=变量值

    或

   变量名=变量值

   export  变量名 

 

 

 

查看环境变量

  set 

 #查看所有变量 

 env

 #查看环境变量

 

 

删除环境变量

   unset    变量名

 

 

 

 

 

[root@aliyun247 ~]# bash

[root@aliyun247 ~]# pstree

init─┬─AliHids───8*[{AliHids}]

     ├─AliYunDun───8*[{AliYunDun}]

     ├─AliYunDunUpdate───6*[{AliYunDunUpdat}]

     ├─crond

     ├─gshelld───3*[{gshelld}]

     ├─9*[java───36*[{java}]]

     ├─java───38*[{java}]

     ├─java───33*[{java}]

     ├─6*[mingetty]

     ├─mysqld_safe───mysqld───29*[{mysqld}]

     ├─nginx───6*[nginx]

     ├─nrpe

     ├─nscd───7*[{nscd}]

     ├─ntpd

     ├─rsyslogd───3*[{rsyslogd}]

     ├─snmpd

     ├─sshd─┬─sshd───bash

     │      └─sshd───bash───bash───pstree

     └─udevd───2*[udevd]

 

 

 

[root@aliyun247 ~]#  env

HOSTNAME=aliyun247

SHELL=/bin/bash

TERM=xterm

HISTSIZE=1000

SSH_CLIENT=59.109.32.90 55902 22

SSH_TTY=/dev/pts/1

USER=root

JRE_HOME=/usr/local/jdk/jre

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin

MAIL=/var/spool/mail/root

PWD=/root

LANG=en_US.UTF-8

HISTCONTROL=ignoredups

HOME=/root

SHLVL=2

LOGNAME=root

CVS_RSH=ssh

SSH_CONNECTION=59.109.32.90 55902 182.92.238.207 22

CLASSPATH=.:/usr/local/jdk/lib:/usr/local/jdk/jre/lib:

LESSOPEN=|/usr/bin/lesspipe.sh %s

G_BROKEN_FILENAMES=1

_=/bin/env

 

 

 

对系统环境 生效的 常用环境变量

 

 

hostname

 #主机名

shell

#当前shell

term

#环境终端

histsize

#历史命令条数

ssh_client

#当前操作环境是用ssh连接的,这里记录客户端ip

ssh_tty

#ssh 连接的终端时pts/1

user

#当前登录用户

 

 

PATH 环境变量:系统查找命令的路径 

         echo $PATH 

         #查看path变量

 

         PATH=${PATH}:/root/sh

         #增加path变量的值

 [root@aliyun247 ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin

 

 

PS1环境变量 :命令提示符设置

[root@aliyun247 ~]# set $PS1

[root@aliyun247 ~]# echo $ps1

 

[root@aliyun247 ~]# echo $PS1

[\u@\h \W]\$

[root@aliyun247 ~]# 

 

 

[\u@\h \W]\$ : 定义为输出格式

 

 

 

 

\d

#显示日期   格式为  星期  月 日

\H 

#显示完整的主机名 

\t

#显示24小时时间制 格式为 hh:mm:ss

\A

#显示24小时时间制时间  格式为 hh:mm

\u

#显示当前用户

\w

#显示当前用户所在目录的完整名称

\W

#显示当前用户所在目录的最后一个目录

\$

#提示符, 如果是root用户提示为 “#” 如果是普通用户提示为"$"

 

 

 

 

 

 

  2.4  语系参数

当前语系查询

 

locale 命令 :查询当前系统内语系

 

LANG

#定义系统主语系变量

LC_ALL

#定义整体语系的变量

 

[root@aliyun247 ~]# locale

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=

 

 

语系变量LANG

 

 

locale -a  | more  

#查看linux支持的所有语系

[root@aliyun247 /]# locale -a  | more  

aa_DJ

aa_DJ.iso88591

aa_DJ.utf8

aa_ER

aa_ER@saaho

aa_ER.utf8

aa_ER.utf8@saaho

aa_ET

aa_ET.utf8

af_ZA

af_ZA.iso88591

af_ZA.utf8

am_ET

am_ET.utf8

an_ES

an_ES.iso885915

an_ES.utf8

ar_AE

ar_AE.iso88596

ar_AE.utf8

ar_BH

ar_BH.iso88596

ar_BH.utf8

ar_DZ

ar_DZ.iso88596

ar_DZ.utf8

ar_EG

ar_EG.iso88596

ar_EG.utf8

ar_IN

ar_IN.utf8

ar_IQ

ar_IQ.iso88596

ar_IQ.utf8

ar_JO

ar_JO.iso88596

ar_JO.utf8

ar_KW

 

查看系统默认语系

cat    /etc/sysconfig/i18n

 [root@aliyun247 ~]# cat    /etc/sysconfig/i18n

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

 

 

 

 

liunx 中文支持 

 

前提条件是 正确安装的中文字体和中文语系

     1: 如果 有图形界面,可以正确支持中文显示

     2: 如果使用第三方远程工具,只要语系设置正确,可以支持中文显示

     3:如果使用纯字符界面 必须使用第三方插件(如zhcon等)

 

 2.5 位置参数变量 

 

 

位置参数变量

作用

$n

n 为数字,$0代表命令本身,$1到$9代表从1到9个参数,10以上的参数需要大括号如 ${10}

$*

这边变量代表命令中所有参数,$*把所有参数都看出一个整体。
$@这个变量也代表命令行中所有的参数,不过$@把每个参数都区分对待。

$#

这个变量代表命令行中所有参数的个数
 

 

 2.6 预定义 变量

 

预定义变量

作用

$? 最后一次命令执行的返回状态。如果这个变量值为0,证明上一个命令正确执行;如果这个变量的值是非0(具体是哪一个数由命令自己决定),则证明上一个命令执行不正确
$$

当前进程的进程号(PID)

$!

后台运行的最后一个进程的进程号(PID)

 

[root@aliyun247 ~]# $$

-bash: 7066: command not found

[root@aliyun247 ~]# $!

[root@aliyun247 ~]# ls $?

ls: cannot access 0: No such file or directory

[root@aliyun247 ~]# lse $?

-bash: lse: command not found

[root@aliyun247 ~]# $$

-bash: 7066: command not found

[root@aliyun247 ~]# $!

[root@aliyun247 ~]# echo $$

7066

[root@aliyun247 ~]# echo $!

 

[root@aliyun247 ~]# ls echo $?

ls: cannot access echo: No such file or directory

ls: cannot access 0: No such file or directory

[root@aliyun247 ~]# 

 

 

 

 

 

 

接收键盘输入

 

read   [选项]   [变量名]

 

选项

 

  -p

#提示信息 ,在等待read 输入时,输出提示信息

-t

#秒数  ,read命令一直等待用户输入,使用此选项可以指定等待时间

-n

#字符数,read 命令只接受指定的字符数,就会执行

-s

#隐藏输入的数据,适用于机密信息的输入 ,如密码等

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值