linux shell 基本使用总结

linux启动过程(centos7)

BIOS(主板) =>MBR(硬盘引导)=>Bootloader(grub)=>kernel=>systemd=>系统初始化=》shell

## 查看内核版本
$  grub2-editenv list
$  uname -r

shell基本用法

执行shell

## 进入home 并执行 ls命令
$ cd /home ; ls -lih
## 给当前用户添加1.sh的执行权限
$ chmod u+x 1.sh

## 使用bash 解析1.sh 并执行
$ bash 1.sh
## 调用系统自带shell执行1.sh (必须要拥有1.sh的执行权限)
$ ./1.sh
## 在当前终端下创建一个bash的子进程执行1.sh
$ bash ./1.sh
## 在当前进程下执行1.sh (可能对当前环境造成影响 例如 1.sh中有cd 命令,执行完1.sh后 当前环境目录会发生改变)
$ source ./1.sh
$ .1.sh

shell的注释

  • 使用#作为单行注释
  • eof截止符不但可以用作后续输入命令,还可以用作注释,常用用法:开始注释部分:输入::<
  • !号一般作为嵌入内容部分,可以用作注释,常用用法:开始注释部分:输入::<<! 结束部分:!
# 我是注释
echo "test"

# 多行注释
:<<!
echo "comment"
echo "comment"
echo "comment"
!

# 多行注释
:<<!
echo "comment"
echo "comment"
echo "comment"
!

shell 相关内容

内建命令与外建命令

内建命令不需要创建子进程
内建命令对当前shell生效

管道与管道符

管道和信号一样,也是进程通信的方式之一,匿名管道(管道符)是Shell编程经常用到的通信工具
管道符是"|",将前一个命令执行的结果传递给后面的命令

重定向符号

一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
[1] 输入重定向符号"<”
read var [2] 输出重定向符号
“>” : 将后面文件的内容清空后 ,清空后再讲前面的内容输入进’>'后面的文件
“>>”:将 输入内容追加到‘>>’后面的文件中(现有文件内的下一行)
“2>”: 错误重定向 将错误信息输出到后面文件中
“&>”: 无论信息是否错误 都输入到后面的文件中

标准输入(standard input)的文件描述符是 0
标准输出(standard output)是 1
标准错误(standard error)是 2

[3] 输入和输出重定向组合使用

## 将1.txt文件中的内容赋值给var2
$ read var2 < 1.txt
## 输出var2对象
$ echo $var2
## 
$ echo $var2 > 1.txt
$ echo $var2 >> 1.txt
$ echo $var2 2> 1.txt
$ echo $var2 &> 1.txt

执行下面命令会产生一个a.sh(a.sh的内容是echo “hello bashi”)

#!/bin/bash 
cat > a. sh <<EOF 
echo "hello bashi"
EOF

变量赋值

变量值有空格等特殊字符可以包含在””或”中
等号两边不可以有空格

$ a=123
## 使用let为变量赋值
$ let a=10+20
## 将命令赋值给变量
$ l=ls
## 将命令结果赋值给变量,使用$()或者``
$ let c=$(ls -l /home)
$ let c=`ls -l /home`

变量引用

${变量名}称作对变量的引用
echo ${变量名}查看变量的值
变 量 名 在 部 分 情 况 下 可 以 省 略 为 {变量名}在部分情况下可以省略为 变量名

##
$ string1="hello linux"
$ echo $string1
$ echo ${string1}

变量的作用范围

变量的默认作用范围:默认只在自己的shell范围内。
export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量

$ string1="hello linux"
## export让子进程访问父进程的变量(变量的导出)
$ export string1
## unset 删除变量
$ unset string1

系统环境变量

环境变量:每个Shell打开都可以获得到的变量
$? : 查看上一条shell命令是否执行成功(0 表示执行成功,1表示执行失败)
$$ : 当前的进程pid
$0 :当前进程的名称

位置变量: $1 、$2… 9 、 9 、 9{10}

## env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令
$ env 
$ echo $USER
$ echo $PATH
## $? 查看上一条shell命令是否执行成功(0 表示执行成功,1表示执行失败)
$ echo $?
## 当前的进程pid
$ echo $$
## 当前进程的名称
$ echo $0
##
$ ./1.sh -a -l
# 结果:
# -a
# -l
# _
$ ./1.sh -a -l jj
# 结果:
# -a
# -l
# jj

1.sh 文件内容

#!/bin/bash

# $1 、$2......$9  、${10}

port1=$1
port2=$2
# 如果$3 为空值则输出_
port3=${3-_}

echo $port1
echo $port2
echo $port3

环境变量配置文件

/etc/profile
/etc/profile.d/
/etc/bashrc
~/.bash_profile
~/.bashrc

[1] 登录用户不同,加载配置文件不同
当使用 su - 用户名切换用户时会加载 (login shell)(执行顺序依次为):
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
当使用 su 用户名切换用户时会加载:
~/.bashrc
/etc/bashrc
[2] 根据用户分类
root 用户和普通用户共用的配置文件:
/etc/profile
/etc/profile.d/
/etc/bashrc
当前用户拥有的配置文件:
~/.bash_profile
~/.bashrc

你可能感兴趣的:(#,linux,shell)