bash 赋值中参数的赋值与自定义指令问题

4. 变量和参数的介绍_高级Bash脚本编程指南-LinuxPlus
第一部分. 热身
第二部分. 基本
8. 操作符与相关主题
第三部分. 进阶
第四部分. 高级主题
34. Bash, 版本2与版本3[Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量 - farwish - 博客园
---------------------------------------------------------------------------------
变量是计算机内存的单元,其中存放的值可以改变。变量用于暂时保存信息。
一. 变量设置规则
1.数字,字母,下划线组成,不能以数字开头。
2.Bash中变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
3.变量用等号连接值,等号左右不能有空格。
4.变量的值如果有空格,需要使用单引号或双引号包括,因为空格代表分割符。
 name="chen wei"
5.在变量的值中,可以使用"\"转义符。
6.如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名" 或 ${变量名} 包含。
7.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
  name=`ls` 或 name=$(ls)
  echo $name
8.环境变量名建议大写,便于区分。
二. 变量分类
1. 用户自定义变量(也叫本地变量):只在当前的shell中生效。
2. 环境变量:变量中保存的是和系统操作环境相关的数据。(值无法更改,可以新建)
  环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。
3. 位置参数变量:用来向脚本当中传递参数或数据,变量名不能自定义,变量作用是固定的。(名称不能自定义,不能新建,只能改值)
4. 预定义变量:Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。(名称不能自定义,不能新建,只能改值)
【1】本地变量&
  name=chenwei & & & & & & & # 变量赋值
  echo $name& &&&&&&&&&&&&&  # 变量调用(chenwei)
  name="$name"is & & & & &# 变量叠加
  echo $name& &&&&&&&&&&   # 变量调用(chenweiis)
  name=${name}poet & &# 变量叠加
  echo $name& &&&&     # 变量调用(chenweiispoet)
  set&&&&&&&&& &&&&&&&&&&    & # 查看所有变量
  unset name& &&&&&&    &# 变量删除
【2】环境变量
  export name=farwish  # 声明环境变量
  env           # 查询环境变量
  unset name       # 删除变量
  系统常见环境变量:
  PATH:冒号分割的路径(系统查找命令的路径),可以使用 echo $PATH 查看
    ( 系统命令之所以不需要指定路径,是因为系统会去 PATH 定义的路径里面顺序查找,找不到才会提示不存在. )
    如果我们自己编写个脚本vim hello. chmod 755 hello. cp hello.sh /usr/local/bin;放入到$PATH中存在目录内,在任意位置输入hello.sh就可以执行了。(但是实际中不这样做,容易让人误解为是系统命令)
    PATH="$PATH":/home/weichen/test    # PATH变量叠加,把我们的脚本所在路径加进去(命令行修改只是临时生效,重启将失效)
&    &PATH=$PATH:/home/weichen/test  ( 环境变量也可以不加引号 )
  PS1:定义系统提示符的变量
    echo $PS1  # 输出为&[\u@\h \W]\$
    PS1='\h:\W \u\$'  # 设置成自定义的(仅临时生效)
     \d :显示日期,格式为&星期 月 日&
     \h :显示简写主机名。如默认主机名&localhost&
     \t &:显示24小时制时间,格式为&HH:MM:SS&
     \T :显示12小时制时间,格式为&HH:MM:SS&
     \A :显示24小时制时间,格式为&HH:MM&
     \u :显示当前用户名
     \w :显示当前所在目录的完整名称
     \W :显示当前所在目录的最后一个目录
     \# :执行的第几个命令
     \$ :提示符,如果是root用户会显示提示符为&#&,如果是普通用户会显示提示符为&$&
【3】位置参数变量
  $n :n为数字,$0代表命令本身,$1-$9 代表第一个到第九个参数,十以上的参数需要用大括号包含,如 ${10} 、${11}
  $* :这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体(如果循环 $* 输出参数,将只输出一次)
  $@ :这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待(如果循环 $@ 输出参数,将单独输出每个参数)
  $# :这个变量代表命令行中所有参数的个数
#!/bin/bash
# 注释:pam.sh
echo $0echo $1echo $2echo $3echo $*echo $@echo $#
  chmod 755 pam.sh
  ./pam.sh abc def hhh
  # 输出:
   ./pam.sh
    abc
    def
    hhh
    abc def hhh
    abc def hhh
  位置参数使用:
#!/bin/bash
# 注释:使用位置参数变量进行数值运算
sum=$(( $sum1 + $sum2 ))
# 变量sum的和是num1+num2, $((
))用于运算;                  # 或者直接 sum=$(( $1 + $2 ))
【4】预定义变量:
  $?&:(echo $?)最后一次执行的命令返回的状态。值为0,证明上一个命令正确执行;如果非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。程序判断命令是否正确执行,只能依赖$?
  $$ :当前进程的进程号(PID)
  $! :后台运行的最后一个进程的进程号(PID)
#!/bin/bash
echo "当前进程号$$"
find /usr -name hello.sh &
echo "后台运行的最后一个进程的进程号$!"
  接收键盘输入:read [选项] [变量名]
    选项:
& &     -p "提示信息"&&&&&:& & 在等待read输入时,输出提示信息
& &     -t 秒数&&&&& & :& & read命令会一直等待用户输入,使用此选项可以指定等待时间
& &     -n 字符数& & :& & read命名只接收指定的字符数就会执行
& &     -s & & & &: & &隐藏输入的数据,适用于机密的信息输入&
& &     -t 和 -p 是必须使用的,-n 和 -s 可选,比用位置参数变量更直观。
#!/bin/bash
read -t 30 -p 'please input your name: ' name
echo $name
read -t 30 -s -p 'please input your password: ' passwd
echo $passwd
read -t 30 -n 1 -p 'please select your sex [M/F]: ' sex
@黑眼诗人 &&shell编程Bash中对变量的操作方法谈_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
shell编程Bash中对变量的操作方法谈
上传于|0|0|文档简介
&&shell编程Bash中对变量的操作方法谈
你可能喜欢1. 用户自定义变量
(1)变量设置规则
① 变量名称可由字母、数字和下划线组成,但不能以数字开头;
② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型;
③ 变量用等号连接值,且等号两侧不能有空格;
④ 变量的值如果有空格,需使用单引号或双引号括起;
⑤ 变量的值中,可使用"\"转义符;
⑥ 如果需要增加变量的值,可以进行变量值的叠加,不过变量需要用双引号包含,即"$变量名",或者用${变量名}包含;
⑦ 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令;
⑧ 环境变量名建议大写,便于区分。
(2)变量分类
① 用户自定义变量;
② 环境变量:主要保存与系统操作环境相关的数据;
③ 位置参数变量:用于向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的;
④ 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量的作用也是固定的。
(3)本地变量
① 变量定义:
[root@localhost ~]# name="ws"
[root@localhost ~]# echo "$name"
② 变量叠加:
[root@localhost ~]# aa=123
[root@localhost ~]# aa="$aa"456
[root@localhost ~]# aa=${aa}789
[root@localhost ~]# echo $aa
③ 变量查看:
[root@localhost ~]# set
colors=/etc/DIR_COLORS
④ 变量删除
[root@localhost ~]# unset name
2. 环境变量
1)用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和该shell的所有子shell中生效。如果把环境变量写入相应的配置文件中,那么该环境变量就会在所有的shell中生效。
父shell中创建子shell,可在当前shell中通过命令bash或csh来创建。可通过pstree命令(功能:确定进程数)来查看父shell与子shell的关系。
[root@localhost ~]# bash
[root@localhost ~]# pstree
sshd───sshd───bash───bash───pstree
其中,sshd为远程连接工具,第一个bash为父shell,第二个bash是子shell,退出子shell只需输入命令exit即可。
2)设置环境变量
格式为:export 变量名=变量值
#将age和sex变量设置为环境变量
[root@localhost ~]# name=ws
[root@localhost ~]# export age=26
[root@localhost ~]# sex=male
[root@localhost ~]# export sex
#然后在当前shell和子shell中进行查看
[root@localhost ~]# set
[root@localhost ~]# bash
3)查询环境变量的命令为:env,删除变量的命令为:unset 变量名
4)系统常见环境变量
① PATH:系统查找命令的路径,系统命令并没有写路径就可执行,如ls,是由于PATH环境变量的作用。因此自己写的脚本拷贝到PATH指定的路径中,无需写路径即可直接执行。
[root@localhost ~]# env | grep PATH
PATH=/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#PATH变量叠加
PATH="$PATH":/root/sh
② PS1:定义系统提示符的变量
显示日期,格式为"星期 月 日"
显示简写主机名
显示12小时制时间,格式为"HH:MM:SS"
显示24小时制时间,格式为"HH:MM"
显示当前用户名
显示当前所在路径的完整名称
显示当前所在目录的最后一个目录
执行的第几个命令
提示符,root用户为"#",普通用户为"$"
[root@localhost ~]# PS1='[\u@\t \w]\$ '
[root@05:46:29 ~]# PS1='[\u@\h \# \W]\$ '
[root@localhost 12 ~]# PS1='[\u@\h \W]\$ '
[root@localhost ~]#
3. 位置参数变量
位置参数变量
n为数字,$0代表命令本身,$1-$9代表第一至第九个参数,十以上的参数需要用大括号包含,如${10}
代表命令行中所有的参数,$*把所有的参数看成一个整体
也代表命令行中所有的参数,不过$@把每个参数区分对待
代表命令行中所有参数的个数
例1:写param.sh脚本
[root@localhost sh]# vim param.h
验证$n,向脚本中传递参数
[root@localhost sh]# ./param.h 11 12 13 1 2
例2:param1.sh脚本
[root@localhost sh]# vim param1.h
#!/bin/bash
sum=$(( $num1 + $num2 ))
[root@localhost sh]# ./param1.sh 1 2
例3:写param3.sh
[root@localhost tmp]# vim param3.sh
#!/bin/bash
#使用$#代表所有参数个数
echo "A total of $# parameters"
#使用$*代表所有的参数
echo "The parameter is:$*"
#使用$@也代表所有参数
echo "The parameter is:$@"
[root@localhost tmp]# ./param3.sh 1 2 3 4 5
A total of 5 parameters
The parameter is:1 2 3 4 5
The parameter is:1 2 3 4 5
例4:$*与$@的区别
[root@localhost sh]# vim param4.sh
#!/bin/bash
# $*中所有参看成是一个整体,所以for只执行一次
for i in "$*"
echo "The parameter is:$i"
# $@中每个参数都看成是独立的,会循环多次
for y in "$@"
echo "The parameter $x is:$y"
x=$(( $x + 1 ))
[root@localhost sh]# ./param4.sh 1 2 3 4 5
The parameter is:1 2 3 4 5
The parameter 1 is:1
The parameter 2 is:2
The parameter 3 is:3
The parameter 4 is:4
The parameter 5 is:5
4. 预定义变量
预定义变量
shell中最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确
当前进程的进程号(PID)
后台运行的最后一个进程的进程号(PID)
逻辑"&&"和"||"可以通过$?来判断是否正确。
例:编写variable.sh脚本
[root@localhost sh]# vim variable.sh
#!/bin/bash
#输出当前进程PID,该PID即为variable.sh脚本执行时,生成的进程的PID
echo "The current process is $$"
# &可以将命令放入后台
find /root -name hello.sh &
echo "The last one Daemon process is $!"
[root@localhost sh]# ./variable.sh
The current process is 1617
The last one Daemon process is 1618
2)read:接收键盘的输入,其格式为:
read [选项] [变量名]
其中,-p "提示信息":在等待read输入时,输出提示信息;
-t 秒数:read命令会一直等待用户输入,使用此选项,可指定等待时间;
-n 字符数:read命令只接受指定的字符数;
-s:隐藏输入的数据,适用于机密信息的输入。
[root@localhost sh]# vim readtest.sh
#!/bin/bash
# 提示"请输入姓名"并等待30s,把用户的输入保存入变量
read -t 30 -p "Please input your name:" name
echo "name is $name"
# 使用-s选项隐藏输入年龄
read -t 30 -s -p "Please enter your age:" age
echo "age is $age"
# 使用-n 1选项只接收一个输入字符就会执行(不用输入回车)
read -n 1 -t 30 -p "Please select your gender [M/F]:" gender
echo "sex is $gender"
[root@localhost sh]# ./readtest.sh
Please input your name:ws
name is ws
Please enter your age:
Please select your gender [M/F]:M
5. Bash的运算符
(1)数值运算与运算符
1)declare声明变量类型,其格式为:
declare [+/-] [选项] 变量名
其中,"-"选项表示给变量设定类型属性,"+"选项表示取消变量的类型属性,-i选项表示将变量声明为整数型,-x选项表示将变量声明为环境变量,-p选项显示指定变量被声明的类型。
# 定义变量aa和bb
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
# 声明变量cc,并保存aa和bb的和
[root@localhost ~]# declare -i cc="$aa"+"$bb"
# 显示cc的类型
[root@localhost ~]# declare -p cc
declare -i cc="33"
# 取消cc的类型属性
[root@localhost ~]# declare +i cc
[root@localhost ~]# declare -p cc
declare -- cc="33"
例2:expr或let数学运算工具(使用较少)
# 给变量aa和bb赋值
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
# dd为aa和bb的和,且注意"+"左右两侧必须有空格
[root@localhost ~]# dd=$(expr "$aa" + "$bb")
[root@localhost ~]# echo $dd
例3:"$(( 运算式 ))"或"$[ 运算式 ]"(使用较多)
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# ee=$(( $aa+$bb ))
[root@localhost ~]# echo $ee
[root@localhost ~]# ff=$[ $aa+$bb ]
[root@localhost ~]# echo $ff
(2)运算符
单目负、单目正
逻辑非、按位取反或补码
乘、除、取模
按位左移、按位右移
小于等于,大于等于,小于,大于
等于、不等于
=,+=,-=,*=,/=,%=,
&=,^=,|=,&&=,&&=
赋值、运算且赋值
# 虽然乘和除的优先级高于加,但通过小括号可调整运算的优先顺序
[root@localhost ~]# aa=$(( (11+3)*3/2 ))
[root@localhost ~]# echo $aa
# 14不能被3整除,余数是2
[root@localhost ~]# bb=$(( 14%3 ))
[root@localhost ~]# echo $bb
# 逻辑与运算
[root@localhost ~]# cc=$(( 1&&0 ))
[root@localhost ~]# echo $cc
(3)变量测试与内容替换
变量置换方式
变量y没有设置
变量y为空值
变量y设置值
x=${y-新值}
x=${y:-新值}
x=${y+新值}
x=${y:+新值}
x=${y=新值}
x=${y:=新值}
x=${y?新值}
新值输出到标准错误输出(即屏幕)
x=${y:?新值}
新值输出到标准错误输出
新值输出到标准错误输出
例:变量测试:x=${y-新值}
[root@localhost ~]# x=${y-new}
[root@localhost ~]# echo $x
[root@localhost ~]# y=""
[root@localhost ~]# x=${y-new}
[root@localhost ~]# echo $x
[root@localhost ~]# y=234
[root@localhost ~]# x=${y-new}
[root@localhost ~]# echo $x
6. 环境变量配置文件
1)source命令--环境变量配置文件的内容需要重新登录才能生效,source命令的作用是让其直接生效,无需重新登录。其格式为:
source 配置文件 或 . 配置文件
注意:.与配置文件中间有空格,且.的作用即为source的作用。
2)环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,如:PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。
系统中的环境变量配置文件主要有:
/etc/profile &; &/etc/profile.d/*.sh &; &~/.bash_profile& ;& ~/.bashrc& ;& /etc/bashrc
环境变量配置文件的先后调用顺序如下图所示:
1)/etc/profile的作用有:USER变量;LOGNAME变量;MAIL变量;PATH变量;HOSTNAME变量;HISTSIZE变量;umask;调用/etc/profile.d/*.sh文件;
2)~/.bash_profile的作用: 调用了~/.bashrc文件;在PATH变量后面加入了":$HOME/bin"目录;
3)~/.bashrc的作用:定义默认别名;调用/etc/bashrc;
4)/etc/bashrc的作用:PS1变量;umask变量;PATH变量;调用/etc/profile.d/*sh文件。注意:与/etc/profile不同,/etc/bashrc针对的是没有登录的shell,即不用输入用户名、密码,直接在shell中进行用户切换的情景。
(3)其他配置文件和登录信息
1)注销时生效的环境变量配置文件:~/.bash_logout;
2)其他配置文件:~/bash_history,当系统出现错误时,一个重要的排错手段;
3)shell登陆信息:
对于本地终端欢迎信息:/etc/issue
显示当前系统日期
显示操作系统名称
显示登录的终端号,比较常用
显示硬件体系结构,如i386,i686等
显示主机名
显示内核版本
显示当前系统时间
显示当前登录用户的序列号
Linux本地支持6个本地字符终端,用Alt+F1~F6进行切换,则可通过\l显示当前登录的是哪个终端。
注意:/etc/issue只对本地登录有效,对远程登录没有作用。
远程终端的欢迎信息:/etc/issue.net,转义符在该文件中不能使用,是否显示此欢迎信息,是由ssh的配置文件(/etc/sshd/sshd_configure)决定的,在该文件中找到"Banner"子串,然后加入"Banner /etc/issue.net"行才能显示。写完之后记得输入service sshd restart命令进行重启ssh服务。
登陆后的欢迎信息:/etc/motd,不管是本地登录还是远程登录,都可以显示此欢迎信息。
阅读(...) 评论()}

我要回帖

更多关于 bash 赋值语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信