目录
管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2
全局变量:直接定义,只能在当前的shell进程里访问,但其它进程以及shell进程的子进程是不能访问的。
环境变量:export,能在当前的shell进程以及shell进程的子进程访问,但其它进程是不能访问的。
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启动方式对变量的影响