linux基础07-bash编程(变量,变量类型)
(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编程(变量,变量类型)的更多相关文章
- linux基础之bash特性
linux基础之bash特性 1.命令历史 命令历史包含的环境变量 $HISTSIZE:命令历史记录的条数 $HISTFILE:命令历史文件~/.bash_history $HISTFILESIZE: ...
- bash编程-Shell变量
bash中,所有变量的值默认均为字符串. 1. 变量操作 调用变量 $变量 查看变量(所有类型) set 删除变量 unset 变量 2. 变量分类 2.1 自定义变量 自定义变量仅对当前Shell有 ...
- Linux基础知识_Shell编程笔记
以下是一些 常用功能 , 基于 centos 6.5 x64 # cp /etc/localtime /etc/localtime.org # rm /etc/localtime # ln -s /u ...
- linux基础6-bash shell编程
1. type [-ta] name 一般情况下,type命令被用于判断另外一个命令是否是内置命令,但是它实际上有更多的用法. 1.1.判断一个名字当前是否是alias.keyword.functio ...
- Linux基础之bash shell介绍及基本特性
今天继续讲Linux基础知识,内容是关于bash shell的.分享以下bash shell的相关知识,例如基本特性等. 1.8)bash shell的介绍 1.8.1)什么是bash shell ...
- BASH 编程之变量高级篇
内部变量 • $$与$BASHPID都代表着执行程序的进程 ID,我们可以通过 echo 打印,并用 ps 指令检查得到相同的进程 ID [root@oracle ~]# echo $BASHPID ...
- Java基础总结--Java编程环境变量配置
1.jdk--bin--都是命令行程序(图形化是对命令行的封装)eg javac&java执行javac必须切换到其所在目录--太麻烦---想在任意目录下使用要执行一个命令--先在当前目录下找 ...
- Linux基础(05)socket编程
Linux的核心思想之一 "一切皆文件" 内容 , socket在Linux内核的实现的代码及TCP和UDP的实现 网络编程常用头文件: https://blog.csdn.net ...
- Linux基础之-Bash命令优先级
一. Bash简介 命令解释器,也就是 Bourne Again Shell,起源于shell.shell俗称壳,它是指UNIX系统下的一个命令解析器:主要用于用户和系统的交互.UNIX系统上有很多种 ...
随机推荐
- 20145325张梓靖 《网络对抗技术》 PC平台逆向破解
20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...
- FireMonkey 源码学习(2)
三.TControl FireMonkey重写了TControl的代码,实现了众多接口,如下图: 基类上实现了众多功能,这里不详细描述. 四.TEdit 编辑框是从TControl—TStyledCo ...
- Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- 流程控制if,while,for
if语句 什么是if语句 判断一个条件如果成立则做...不成立则做....为何要有if语句 让计算机能够像人一样具有判断的能力 如何用if语句 语法1: if 条件1: code1 code2 cod ...
- MongDB 数据库使用技巧及注意事项
说明 本文记录MongoDB数据库的使用技巧总结,特性发现. 利用TTL特性实现数据定时删除 限制: 你不能创建TTL索引,如果要索引的字段已经在其他索引中使用. 索引不能包含多个字段. 索引的字段必 ...
- 【做题】arc080_f-Prime Flip——转换、数论及匹配
题意:有一个无限序列,其中有\(n\)个位置上的数为\(1\),其余都是\(0\).你可以进行若干次操作,每次选取序列上的一个区间\([l,r)\),满足\(r-l\)为奇质数,将在这个区间上的数都异 ...
- 外键 Foreign keys
https://docs.microsoft.com/en-us/sql/relational-databases/tables/create-foreign-key-relationships?vi ...
- How to search for ? (question mark) in Excel
The ? is a wildcard which represents a single character, and the * is a wildcard character that repr ...
- HIHOcoder 1441 后缀自动机一·基本概念
思路 SAM的概念题 暴力模拟就好了 代码 #include <cstdio> #include <cstring> #include <algorithm> #i ...
- [JavaScript] - 判断时间是否是当天
https://www.codewars.com/kata/is-the-date-today/train/javascript function isToday(date) { return new ...