Shell基本知识_lh

按照惯例,Shell变量由全大写字母加下划线组成。

一、shell变量

Shell基本知识_lh_第1张图片

在系统中,环境变量是一个二维数组的形式存在 environ,环境变量父进程会遗传给子进程,下面是printenv

#include 
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、定义环境变量

Shell基本知识_lh_第2张图片

export将本地变量导出为环境变量(临时有效),放到/etc/bashrc文件中,会成为全局终端参数,永久有效。

注:每个用户终端下都有一个bashrc配置文件(.bashrc)

环境变量的取消:

Shell基本知识_lh_第3张图片

2、变量的使用

Shell基本知识_lh_第4张图片

二、转义字符:去掉字符特殊性 &  续行

Shell基本知识_lh_第5张图片

续行:

Shell基本知识_lh_第6张图片

三、常用的位置参数和特殊变量

有很多特殊变量是被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
$$ 			当前进程号

Shell基本知识_lh_第7张图片

参数调整:shift命令:参数左移

Shell基本知识_lh_第8张图片

#! /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 < &-               关闭标准输入

 

你可能感兴趣的:(Shell脚本)