Linux进阶-Shell编程与环境变量

目录

Shell与图形化界面

shell简介

shell、中断、控制台区别

设置PATH

永久设置1

永久设置2

临时设置

Shell启动方式

Shell脚本语法

定义变量

使用变量

将命令的结果赋值给变量

删除变量:unset

退出当前进程:exit

读取从键盘输入的数据 :read

对整数进行数字运算:(())

逻辑与或

检测某个条件是否成立

管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2

if语句 

if else语句

if elif else语句

 case in语句

for in循环 

while循环

函数

全局变量:直接定义,只能在当前的shell进程里访问,但其它进程以及shell进程的子进程是不能访问的。

环境变量:export,能在当前的shell进程以及shell进程的子进程访问,但其它进程是不能访问的。

全部用户、全部进程共享:/etc/bash.bashrc

一个用户、全部进程共享:~/.bashrc

shell子进程中执行:/bin/bash和./

当前进程中执行:source和.


Shell与图形化界面

shell简介

shell是应用程序的一种,比如/bin/sh、/bin/bash等,是用户与linux内核沟通的桥梁。对外接收用户输入的命令,对内通过“系统调用”传递给内核运行。呈现内核运行界面。

Shell原寓“壳”,即充当着“中间人”身份。shell以键盘操作为主,需要记忆各种控制命令。图形化界面以鼠标操作为主,简单易学。

比如我们输入“ls”并回车时,shell程序找到“ls”程序并运行,把结果打印出来。

shell脚本常用后缀名:.sh。

Shell寻找程序:会去PATH的环境变量所指示的位置寻找。

查看PATH变量可得到指示的位置,用“:”隔开,可使用“echo $PATH”查看。

shell命令本质:内置命令/外部命令(应用程序)。(可由type <command>判断)

例如:创建hello.c,意在终端输出hello world。然后编译这个c文件(gcc hello.c -o hello),然后把hello移动到/usr/bin/。

当向终端输入hello时,终端输出hello world。这个c文件就成了shell的外部命令。

shell、中断、控制台区别

shell:指命令行解释器,常用的解释器有bash、sh,在Ubuntu系统默认使用bash解释器,所以有时说bash也是指命令行。

Terminal(终端):指用来运行Shell的工具。如Ubuntu系统自带的本地终端、开发板的串口终端、网络访问的ssh终端。

Console(控制台):特指某些终端,通常是指它的物理形态,如带键盘和显示器的物理设备。

设置PATH

永久设置1

修改/etc/environment,比如:sudo gedit /etc/environment,然后添加下行红色部分。然后重启系统或重新登录。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/用户名"

永久设置2

修改~/.bashrc,在行尾添加或修改下行部分。然后重启系统或重新登录。

export PATH=$PATH:/home/用户名

临时设置

在终端执行以下命令,这只对当前终端有效。

export PATH=$PATH:/home/用户名

Shell启动方式

相对路径运行(./)
指定解释器运行(/bin/bash)
source和.

#include <stdio.h>
int main()
{
    printf("hello world!\n");
    return 0;
}

#!/bin/bash
echo "hello world!"

Shell脚本语法

定义变量

variable=value

variable='value'(符号内不做逻辑判断)

variable="value"。 

使用变量

$variable

${variable}

将命令的结果赋值给变量

variable=`command`

variable=$(command)

删除变量:unset

特殊变量描述
$0当前脚本的文件名
$n(n>=1)传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
$*传递给脚本或函数的所有参数
$@传递给脚本或函数的所有参数。当被双引号“”包含时,$@与$*稍有不同
$#传递给脚本或函数的参数个数
$$当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID
$?上个命令的退出状态或获取函数返回值

退出当前进程:exit

读取从键盘输入的数据 :read

对整数进行数字运算:(())

逻辑与或

command1&&command2

command1||command2

检测某个条件是否成立

test expression

[ expression ]

选项描述
-eq判断数值是否相等
-ne判断数值是否不相等
-gt判断数值是否大于
-lt判断数值是否小于
-ge判断数值是否大于等于
-le判断数值是否小于等于
-z str判断字符串str是否为空
-n str判断字符串str是否为非空
=和==判断字符串str是否相等
-d filename判断文件是否存在,并且是否为目录文件
-f filename判断文件是否存在,并且是否为普通文件

管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2

if语句 

if condition
then
    statement(s)
fi

if else语句

if condition
then
    statement1
else
    statement2
fi

if elif else语句

if condition1
then
    statement1
elif condition2
then
    statement2
...
else
    statement
fi

 case in语句

case expression in
    pattern1)
        statement1
        ;;
    pattern2)
        statement2
        ;;
    pattern3)
        statement3
        ;;
......
            *)
        statementn
        ;;
esac

for in循环 

for variable in value_list
do
    statements
done

value_list:

直接给出具体的值;

给出一个取值范围;

使用命令的执行结果;

使用Shell通配符;

使用特殊变量。

while循环

while condition
do
    statements
done

  

函数

function name(){
    statements
    [return value]
}

全局变量:直接定义,只能在当前的shell进程里访问,但其它进程以及shell进程的子进程是不能访问的。

环境变量:export,能在当前的shell进程以及shell进程的子进程访问,但其它进程是不能访问的。

shell进程每次启动时,它都会执行shell配置文件的代码来做一些初始化的工作。 

如果我们将shell变量的定义放到shell配置文件的话,shell进程一启动,就会去定义这些变量。

与Bash Shell有关的配置文件主要有:

/etc/profile

~/.bash_profile

~/.bash_login

~/.profile

~/.bashrc

/etc/bashrc

/etc/bash.bashrc

/etc/profile.d/*.sh

Shell执行顺序:/etc/profile、~/.profile(~/.bash_profile、~/.bash_login)

全部用户、全部进程共享:/etc/bash.bashrc

一个用户、全部进程共享:~/.bashrc

shell启动方式对变量的影响

shell子进程中执行:/bin/bash和./

当前进程中执行:source和.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值