shell-bash学习01基础、打印、环境变量
基础
终端提示符: username@hostname$;
$:一般用户#:root用户
运行脚本
Bash执行: *bash script.sh;- 直接运行:
- 脚本开头添加
shebang起始:#!/bin/bash,解析Bash解释器命令路径; - 设置运行权限:
chmod a+x script.sh; //所有人都可执行 - 直接使用脚本:
./script.sh;
- 脚本开头添加
路径:
file = ./file;~:表示主目录,通常是/home/user,其中user是用户名;
命令分隔
- 在
Bash中每个命令或命令序列是通过分号或换行符分隔;
注释
#注释开始到行尾;
终端打印的基本命令
- 打印字段可以不带引号/单引号/双引号;
- 不带引号要注意些特殊的字符,如分号;
echo
- 默认换行;
- 变量替换的单引号中无效;
- 添加参数
*-n: 不换行;
*-e: 使用转义序列; - 打印彩色输出:
//代码
echo -e '\e[1;31m This is red text \e[0m'
echo -e '\e[1;31m red text\e[1;32m green text \e[0m'
//原理
\e[1;31m: 将颜色设置为红色
\e[0m: 将颜色重新设置
常用颜色码:
重置=0 黑色=30 红色=31 绿色=32 黄色=33 蓝色=34 洋红=35 青色=36 白色=37
- 另一种颜色显示
#! /bin/bash
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
echo "${red}error${normal}"
echo "${green}success${normal}"
echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.
printf
- 不换行;
- 使用的参数和C语言中
printf函数一样: 使用引用文本或由空格分隔的参数; - 使用格式化字符串例子:
//代码
printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Jinks 80.3444
printf "%-5s %-10s %-4.2f\n" 2 pen 90.443
//原理
%s,%c,%f都是格式替换符,参数放在之间;
%-5s:指定一个左对齐的宽度为5的字符串替换;
%-4.2f:格式化浮点数,保留两位小数;
变量与环境变量
- 无论给变量赋值时有没有使用引号,值都会以字符串的形式储存;
- 环境变量是未在当前进程中定义,而从父进程中继承而来的变量;
变量操作
- 赋值:
var=value;注意没有空格; - 打印:
echo $var / echo ${var};注意使用单引号时,变量不会被扩展,将依照原样显示; - 获取字符串长度:
echo ${#var};
获取进程环境变量
- 获取正在运行程序的进程ID:
pgrep $P; - 使用
cat获取环境变量:cat /proc/$PID/environ; - 优化显示使以NULL字符隔开:
cat /proc/$PID/environ | tr '\0' '\n';
查看当前shell环境变量
env;
设置当前shell环境变量
export命令用来设置环境变量;至此之后,从当前shell脚本执行的任何应用程序都会继承这个变量;注意其他shell脚本不会受影响;
//修改
HTTP_PROXY=192.168.1.23:3128
export HTTP_PROXY
//添加
PATH="$PATH:/home/user/bin"
export PATH
- 常用的环境变量:
SHELL: 当前使用的shell类型;
PWD: 当前目录;
UID: 用户类型, 超级用户为0;
HOME: 主目录;
PS1: Bash提示字符串;
linux中的配置文件
常用文件
/etc/profile中设定的变量(全局)的可以作用于任何用户;~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量;/etc/profile: 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行;并从/etc/profile.d目录的配置文件中搜集shell的设置;/etc/bashrc: 为每一个运行shell的用户执行此文件;~/.bash_profile: 每个用户都可使用该文件输入专用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件;~/.bashrc: 包含专用的bash信息,当登录时以及每次打开新的shell时,该文件被读取;~/.bash_logout:当每次退出系统/shell时,执行该文件;
设置环境变量时的级别区分
- 安装程序后可能需要设置的环境变量:
PATH:可执行程序的查找路径;LD_LIBRARY_PATH:动态库的查找路径; - 仅在当前
shell中配置:export PATH="$PATH:/my_new_path"; - 当前用户级别: 在
~/.bashrc中添加此条语句; - 系统级别(所有用户): 在
/etc/profile中添加; - 注意他们的环境变量覆盖是从
shell中的配置开始的; - 设置生效:
* 重启
* 重现执行修改变变量的文件:source /etc/profile; / source ~/.bashrc;
优化添加路径
- 以
~/.bashrc为例;
afterpend() { eval "$1=\$$1:$2"; }
afterpend PATH /test/bin
shell-bash学习01基础、打印、环境变量的更多相关文章
- Python 基础-python环境变量、模块初识及字符类型
(1).模块内置模块.第三方模块.自定义模块初识模块:sys \ os一般标准库存放路径 C:\Users\Administrator\AppData\Local\Programs\Python\Py ...
- Bash 中的 _ 是不是环境变量
首先,我们想到的会是 export(等价于 declare -x)命令: $ export | grep 'declare -x _=' 没有找到,那么结论就是 _ 不是环境变量?当然没那么简单,否则 ...
- JAVA_SE基础——2.环境变量的配置&测试JDK
哈喽,利用晚上的空余时间再写篇心的~~~ 谢谢大家 前一篇文章 JAVA_SE基础--JDK&JRE下载及安装http://blog.csdn.net/thescript_j/article ...
- (大数据工程师学习路径)第一步 Linux 基础入门----环境变量与文件查找
环境变量与文件查找 本节介绍环境变量的作用与用法,及几种搜索文件的方法.学会这些技巧高效地使用 Linux. 一.环境变量 1.变量 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变 ...
- shell基础:环境变量
子shell是在父shell中打开的shell. 使用pstree查看进程树. $调用环境变量 set查看所有变量内容, env查询环境变量 只是临时改变
- Linux学习之十一、环境变量的功能
环境变量的功能 可以利用两个命令来查阅,分别是 env 与 export 呢! 范例一:列出目前的 shell 环境下的所有环境变量与其内容. [root@www ~]# env SHELL 告知我们 ...
- Linux基础入门-环境变量与文件查找
一.环境变量: Shell中的变量也有不同的数据类型,不用专门指定类型名,可以参与运算,有作用域限制. declare tmp 创建一个变量 可以不用专门声明,可以即用即创建 tmp=shiyanlo ...
- linux学习笔记:关于环境变量
(摘自https://blog.csdn.net/llzk_/article/details/53813266之后整合) 1.linux系统的条件 Linux是一个多用户的操作系统,每个用户登录系统时 ...
- Linux学习笔记之Linux环境变量总结
0x00 概述 Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量. 0x01 Linux环境变量分类 按照生命周期来分,Lin ...
随机推荐
- C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁.天哪,我可不是武断,算了.不要太绝对了.99.9%的人吧,都遇到过这个问 ...
- 用SSH登录局域网中使用网络设置为NAT的虚拟机中的linux
环境描述: A客户机,安装有putty软件使用SSH方式登录B主机中的虚拟机中的linux:A机的网络地址:192.168.1.2 B主机为Windows7平台,B主机的网络地址为:192.168.1 ...
- Linux 命令执行结果输出到屏幕的同时写入到文件中
tee命令可以做到这一点: 例:ls -al /home | tee log 就可以把命令输出的内容显示在屏幕上的同时也输出至文件log.
- autolayout autoresizing
WWDC 2012 Session笔记——202, 228, 232 AutoLayout(自动布局)入门 这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站 ...
- 编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值
编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值 1 #import <Foundation/Foundation.h> 2 3 int main( ...
- 单击双击手势(UITapGestureRecognizer)
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- C#学习笔记-----C#枚举中的位运算权限分配
一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算 得到的结果是 0011,也就是3 2.位预算有多少种?(我们就将几种我们权限中会 ...
- MVC – 7.Razor 语法
7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ...
- HTTPS的一些疑问解答
PHP写的网站怎么用https访问,具体要怎样 这跟用什么语言写的网站没有关系,可以去申请个快速的SSL证书,一年也就几十块. 开启apache server的ssl,自己做个免费的ssl证书或者去申 ...
- ASP.NET Web API 使用Swagger生成在线帮助测试文档
Swagger-UI简单而一目了然.它能够纯碎的基于html+javascript实现,只要稍微整合一下便能成为方便的API在线测试工具.项目的设计架构中一直提倡使用TDD(测试驱动)原则来开发,sw ...