按照惯例,Shell变量由全大写字母加下划线组成。
一、shell变量
在系统中,环境变量是一个二维数组的形式存在 environ,环境变量父进程会遗传给子进程,下面是printenv
#include <stdio.h>
extern char **environ;
int main(void){
int i = 0;
for(i = 0; environ[i] != NULL; i++){
printf("%s\n", environ[i]);
}
return 0;
}
注:$$代表当前进程
echo $$ :打印当前进程id
1、定义环境变量
export将本地变量导出为环境变量(临时有效),放到/etc/bashrc文件中,会成为全局终端参数,永久有效。
注:每个用户终端下都有一个bashrc配置文件(.bashrc)
环境变量的取消:
2、变量的使用
二、转义字符:去掉字符特殊性 & 续行
续行:
三、常用的位置参数和特殊变量
有很多特殊变量是被Shell自动赋值的,我们已经遇到了$?和$1。其他常用的位置参数和特殊变量在这里总结一下:
$0 相当于C语言main函数的argv[0]
$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]...
$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$* 表示参数列表"$1" "$2" ...,同上
$? 上一条命令的Exit Status
$$ 当前进程号
参数调整:shift命令:参数左移
#! /bin/sh
echo "The program $0 is now running"
echo "The first parameter is $1"
echo "The second parameter is $2"
echo "The parameter list is $@"
shift
echo "The first parameter is $1"
echo "The second parameter is $2"
echo "The parameter list is $@"
//////////result////////////////////
1 2 3 4
shift
2 3 4
四、输入输出
echo
显示文本行或变量,或者把字符串输入到文件。
echo [option] string
-e 解析转义字符
-n 不回车换行。默认情况echo回显的内容后面跟一个回车换行。
echo "hello\n\n"
echo -e "hello\n\n"
echo "hello"
echo -n "hello"
管道
可以通过 | 把一个命令的输出传递给另一个命令做输入。
cat myfile | more
ls -l | grep "myfile"
df -k | awk '{print $1}' | grep -v "文件系统"
df -k 查看磁盘空间,找到第一列,去除“文件系统”,并输出
tee
tee命令把结果输出到标准输出,另一个副本输出到相应文件。
df -k | awk '{print $1}' | grep -v "文件系统" | tee a.txt
tee -a a.txt表示追加操作。
df -k | awk '{print $1}' | grep -v "文件系统" | tee -a a.txt
文件重定向
cmd > file 把标准输出重定向到新文件中
cmd >> file 追加
cmd > file 2>&1 标准出错也重定向到1所指向的file里
cmd >> file 2>&1
cmd < file1 > file2 输入输出都定向到文件里
cmd < &fd 把文件描述符fd作为标准输入
cmd > &fd 把文件描述符fd作为标准输出
cmd < &- 关闭标准输入