---------------------------------------------------------------------------------

变量是计算机内存的单元,其中存放的值可以改变。变量用于暂时保存信息。

一. 变量设置规则

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.sh; chmod 755 hello.sh; 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 $0
echo $1
echo $2
echo $
echo $*
echo $@
echo $#

  chmod 755 pam.sh

  ./pam.sh abc def hhh

  # 输出:

   ./pam.sh

    abc

    def

    hhh

    abc def hhh

    abc def hhh

    3

  位置参数使用:

#!/bin/bash
# 注释:使用位置参数变量进行数值运算 num1=$
num2=$
sum=$(( $sum1 + $sum2 )) # 变量sum的和是num1+num2, $(( ))用于运算;
                 # 或者直接 sum=$(( $1 + $2 ))
echo $sum

【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  -p 'please input your name: ' name
echo $name read -t -s -p 'please input your password: ' passwd
echo '\n'
echo $passwd read -t -n -p 'please select your sex [M/F]: ' sex
echo '\n'
echo $sex

Link:http://www.cnblogs.com/farwish/p/3923622.html

[Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量的更多相关文章

  1. Shell 变量详解教程之位置变量与预定义变量。

    Shell 变量分为3部分,分别是用户自定义变量.位置变量和预定义变量. 一.   自定义变量 那么,什么是变量呢?简单的说,就是让某一个特定字符串代表不固定的内容,用户定义的变量是最普通的Shell ...

  2. Shell 变量详解教程之位置变量与预定义变量

    Shell 变量分为3部分,分别是用户自定义变量.位置变量和预定义变量. 一.   自定义变量 那么,什么是变量呢?简单的说,就是让某一个特定字符串代表不固定的内容,用户定义的变量是最普通的Shell ...

  3. 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量

    环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...

  4. Linux学习--第十天--bash脚本、用户自定义变量、环境变量、位置参数变量、预定义变量、标准输入输出、wc、history、dd、PS1

    shell简介 分为两种c shell 和b shell b shell:sh.ksh.Bash.psh.zsh: (Bash和sh兼容,linux基本shell是Bash) c shell:csh. ...

  5. Linux Shell基础 位置参数变量、预定义变量

    位置参数变量 在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数.其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数 ...

  6. 『忘了再学』Shell基础 — 17、预定义变量

    目录 1.预定义变量$? 2.预定义变量$$和$! 我们之前说过,Shell中的变量不是按照变量值的类型来进行分类的,而是按照Linux系统中定义的变量类别来分类的. 预定义变量就是,事先把变量的名称 ...

  7. linux中位置参数变量和预定义变量

    位置参数变量   预定义变量

  8. Shell系列(12)- 预定义变量(5)

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

  9. 40 VSCode下.json文件的编写——(1) linux/g++ (2).json中参数与预定义变量的意义解释

    0 引言 转入linux/VSCode编程之后,迫切了解到有必有较为系统地学习一下VSCode中相关配置文件的写法.下面将分为 linux/g++编译指令..json文件关键词/替换变量的意义.编译链 ...

随机推荐

  1. 关于idea的debug

    idea的debug真的是超级好用哎.分享几个今天学会的新方式: 1.右键会发现此选项 ,点击出现 在输入框中输入,可以通过某些公式单独计算. 2.点击属性值,右键点击set values 会出现一个 ...

  2. linux rpm方式安装mysql

    01.搜索 mysql linux 网盘地址    http://pan.baidu.com/s/1qYOC6cs 02.把下载好的mysql 使用 xftp传到 linux中 software 文件 ...

  3. vim中将小写替换为大写--快速解决变量名风格

    将C语言的下划线分割快速替换为Java的驼峰方式. 命令如下 :%s/_\([a-zA-Z]\)/\U\1/g 参考文档

  4. [LeetCode&Python] Problem 720. Longest Word in Dictionary

    Given a list of strings words representing an English Dictionary, find the longest word in words tha ...

  5. spring boot 之 spring task(定时任务)

    cron:通过表达式来配置任务执行时间cron表达式详解 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为: 秒(0~59)分钟(0~59)3 小时(0~23)4  天(0 ...

  6. noip-2006普及组-数列- 【模拟-找规律-快速幂】

    链接:https://ac.nowcoder.com/acm/contest/153/1047 来源:牛客网 题目描述 给定一个正整数k( ≤ k ≤ ),把所有k的方幂及所有有限个互不相等的k的方幂 ...

  7. 19/03/13python学习笔记

    1.变量命名 name1 = 1 name2 = "sunj" 2.命名变量的规则 (1.变量是字母.数字.下划线的组合(2.不能以数字开头(3.不能用关键词命名变量(4.变量中间 ...

  8. APK重编译

    最近沉迷某游戏 尝试了一些不可描述的东西 , 记录一下研究过程 具体是哪个app不公开 ... 准备工具 APKtool && signapk && jre .net ...

  9. zombodb 低级api 操作

    zombodb 低级api 允许直接从zombodb 索引中进行insert.delete 文档,同时保留了mvcc 的特性,但是数据没有存储在 pg 中,但是也带来数据上的风险,我们需要注意进行es ...

  10. CSS 社区的解决方案,对比

    在众多解决方案中,没有绝对的优劣.还是要结合自己的场景来决定. 我们团队在使用过 scss 和 css modules 后,仍然又重新选择了使用 scss.css modules 虽然有效解决了样式冲 ...