(1)
shell: 弱类型编程语言

强:变量在使用前,必须事先声明,甚至还需要初始化;
弱:变量用时声明,甚至不区分类型;

变量赋值:VAR_NAME=VALUE

(2)
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量

(3)变量的类型及作用域
•本地变量:
set VARNAME=VALUE: 作用域为整个bash进程;
引用变量:${varname}, 在不引起歧义的情况下,括号可以省略。

•局部变量:
local VARNAME=VALUE:作用域为当前代码段;

•环境变量:作用域为当前shell进程及其子进程;
export VARNAME=VALUE //定义环境变量方式1.
或者:
VARNAME=VALUE
export VARNAME //定义环境变量方式2.

•位置变量:
$1, $2, ...

•特殊变量:
$?: 上一个命令的执行状态返回值;

•程序执行,可能有两类返回值:
程序执行结果
程序状态返回代码(0-255)
0: 正确执行
1-255:错误执行,1,2,127系统预留;

(4)输出重定向:
>
>>
2> //错误重定向
2>> //错误追加重定向
&> //输入命令,正确和错误信息都不输出在屏幕上,直接输到你重定向的一个文件内。

特殊的输出重定向:
/dev/null: 软件设备, bit bucket,数据黑洞
解释:
/dev/null 代表空设备文件,它等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。

1:在不想把标准输出和标准出错信息输出到控制台,也不想重定向到文件时经常使用
2:不能忽略其读入功能。从/dev/null读入时都是0
3:系统的垃圾桶,类似于Windows的回收站,不同的是这个设备有去无回,而回收站还是可以回收的。
如果程序有输出(标准、错误等),而你又不想让它输出到任何文件、终端,就可以重定向到这个设备去
4:空设备,bit垃圾箱

0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)

1>/dev/null等同于 >/dev/null
>/dev/null 2>/dev/null 等同于 >/dev/null 2>&1
&1:&表示等同于的意思,2>&1,表示2的输出重定向等于1

例:
①禁止标准输出.

cat $filename >/dev/null
# 文件内容丢失,不会输出到标准输出,.

②禁止标准错误

rm $badname 2>/dev/null
#删除文件错误时,不会再有提示到终端,都丢到/dev/null里去了

③禁止标准输出和标准错误的输出.

cat $filename 2>/dev/null >/dev/null
# 如果"$filename"不存在,将不会有任何错误信息提示.
# 如果"$filename"存在, 文件的内容不会打印到标准输出.
# 因此, 上面的代码根本不会输出任何信息.
# 当只想测试命令的退出码而不想有任何输出时非常有用。

(5)
撤消变量:
unset VARNAME

(6)
•查看当shell中变量:
set

•查看当前shell中的环境变量:
printenv
env
export

•给字符串增加值
例如:test=aaa
test=$test:bbb //假设以:号分隔,此时test=aaa:bbb

同样,环境变量PATH也可以这样处理。
export PATH=$PATH:/usr/local/python/bin //加不加export都可以

(7)
#!/bin/bash //which bash可以显示路径
# 注释行,不执行
添加执行权限:chmod +x test.sh
如果不添加执行权限,也可以用:bash test.sh

脚本在执行时会启动一个子shell进程;
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;

练习:写一个脚本,完成以下任务
1、添加5个用户, user1,..., user5
2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;
3、每个用户添加完成后,都要显示用户某某已经成功添加;
useradd user1
echo "user1" | passwd --stdin user1 &> /dev/null
echo "Add user1 successfully."

linux基础07-bash编程(变量,变量类型)的更多相关文章

  1. linux基础之bash特性

    linux基础之bash特性 1.命令历史 命令历史包含的环境变量 $HISTSIZE:命令历史记录的条数 $HISTFILE:命令历史文件~/.bash_history $HISTFILESIZE: ...

  2. bash编程-Shell变量

    bash中,所有变量的值默认均为字符串. 1. 变量操作 调用变量 $变量 查看变量(所有类型) set 删除变量 unset 变量 2. 变量分类 2.1 自定义变量 自定义变量仅对当前Shell有 ...

  3. Linux基础知识_Shell编程笔记

    以下是一些 常用功能 , 基于 centos 6.5 x64 # cp /etc/localtime /etc/localtime.org # rm /etc/localtime # ln -s /u ...

  4. linux基础6-bash shell编程

    1. type [-ta] name 一般情况下,type命令被用于判断另外一个命令是否是内置命令,但是它实际上有更多的用法. 1.1.判断一个名字当前是否是alias.keyword.functio ...

  5. Linux基础之bash shell介绍及基本特性

    今天继续讲Linux基础知识,内容是关于bash shell的.分享以下bash shell的相关知识,例如基本特性等.  1.8)bash shell的介绍 1.8.1)什么是bash shell ...

  6. BASH 编程之变量高级篇

    内部变量 • $$与$BASHPID都代表着执行程序的进程 ID,我们可以通过 echo 打印,并用 ps 指令检查得到相同的进程 ID [root@oracle ~]# echo $BASHPID ...

  7. Java基础总结--Java编程环境变量配置

    1.jdk--bin--都是命令行程序(图形化是对命令行的封装)eg javac&java执行javac必须切换到其所在目录--太麻烦---想在任意目录下使用要执行一个命令--先在当前目录下找 ...

  8. Linux基础(05)socket编程

    Linux的核心思想之一 "一切皆文件" 内容 , socket在Linux内核的实现的代码及TCP和UDP的实现 网络编程常用头文件: https://blog.csdn.net ...

  9. Linux基础之-Bash命令优先级

    一. Bash简介 命令解释器,也就是 Bourne Again Shell,起源于shell.shell俗称壳,它是指UNIX系统下的一个命令解析器:主要用于用户和系统的交互.UNIX系统上有很多种 ...

随机推荐

  1. P2763 试题库问题(dinic)

    P2763 试题库问题 dinic 搞个虚拟源点和汇点,瞎建建边就好辣. 偷张图↓↓ 如果没满流就是无解辣 输出方案咋办呢? 枚举每种类型,蓝后枚举它们的边 如果该边被使用了(通过判断反向边的流量), ...

  2. scrapy - Request 中的回调函数不执行

    在 scrapy 中, scrapy.Request(url, headers=self.header, callback=self.parse) 调试的时候,发现回调函数 parse_detail  ...

  3. 【POJ1509】Glass Beads

    [POJ1509]Glass Beads [题目描述]给定字符串S,并规定首尾相连成环,求出最小字典序. [输入]输入有多个数据,第一行只包括正整数N,表示有N组数据.每个数据包括一行,输入该字符串. ...

  4. php知识点-1

    global 是在函数内部 声明一个 函数外部的变量(即所谓的全局变量, 而所谓的超全局变量是指 像 $_POST, $GLOBALS等之类的自动系统变量) 的一个别名. 在函数内部使用 unset( ...

  5. CodeForces 430A Points and Segments (easy)(构造)题解

    题意:之前愣是没看懂题意...就是给你n个点的坐标xi,然后还规定了Li,Ri,要求给每个点染色,每一组L,R内的点红色和黑色的个数不能相差大于1个,问你能不能染成功,不能输出-1,能就按照输入的顺序 ...

  6. activiti 5.13流程图连线名称不显示bug修复

    使用modeler设计器,流程图连线名称是有显示的,但是运行结果却没显示.找到网上2遍文章,说是activiti框架中的一个bug,要修改 DefaultProcessDiagramGenerator ...

  7. better-scroll影响vue中radio和checkbox的双向数据绑定

    我的解决办法:radio <input v-model="answer" type="radio" name="answer" val ...

  8. Mixins 混入选项操作

    Mixins一般有两种用途: 1.在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染. 2.很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重 ...

  9. Java中常用的方法

    枚举: 1:DemoEnum.valueOf(String str) 从枚举类中中找字符串,如果有则返回对应枚举值 2:DemoEnum.values() 获得枚举集合 3:DemoEnum.prop ...

  10. .Net Core项目在Docker上运行,内存占用过多导致pods重启的问题

    默认情况下,.NET Core应用的内存回收模式是Server模式,这种情况下,内存占用和服务器核心数量有关,一半占用量比较大. 我们的应用目前吞吐量都不大,可以采用Workstation模式,这种模 ...