什么是shell

当执行shell命令的时候,会调用该软件,调用预先预留好的接口,执行相关操作。

关于shell

一般使用的是bin/bash

shell 变量

环境变量

环境变量的取用,使用echo命令,达到变量的取用目的
例如

ming@ming-pc-xiao:/var/lib/dpkg$ echo ${PATH}
/home/ming/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

设置变量

设置单一变量其名字为ming

ming@ming-pc-xiao:/var/lib/dpkg$ name=ming
ming@ming-pc-xiao:/var/lib/dpkg$ 

修改变量

ming@ming-pc-xiao:/var/lib/dpkg$ echo $PATH
/home/ming/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/home/dmtsai/bin:/home/dmtsai/bin
ming@ming-pc-xiao:/var/lib/dpkg$ 
ming@ming-pc-xiao:/var/lib/dpkg$ name=$name
ming@ming-pc-xiao:/var/lib/dpkg$ name=$name:minh
ming@ming-pc-xiao:/var/lib/dpkg$ echo $name
ming:minh
ming@ming-pc-xiao:/var/lib/dpkg$ name={$name}ming
ming@ming-pc-xiao:/var/lib/dpkg$ echo $name
{ming:minh}ming
ming@ming-pc-xiao:/var/lib/dpkg$ 

env

使用env命令可以列出所有的环境变量

ming@ming-pc-xiao:/var/lib/dpkg$ env | grep home
ZEITGEIST_DATA_PATH=/home/ming/.local/share/zeitgeist
HOME=/home/ming
PATH=/home/ming/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/home/dmtsai/bin:/home/dmtsai/bin
ming@ming-pc-xiao:/var/lib/dpkg$ 

其中输出的为使用的主目录

$本身也是一个变量

关于bash本身

登录linux以后,取得一个bash,其bash为一个独立的应用程序。
这个程序为一个程序识别码,为PID,当子进程执行的时候,父进程处于sleep状态。
所有的程序都是由父进程衍生来的。

即,子程序会继承父程序的环境变量。

变量赋值

让使用者输入变量,进行赋值

ming@ming-pc-xiao:~$ read atest
ming
ming@ming-pc-xiao:~$ echo $atest
ming
ming@ming-pc-xiao:~$ 

在30秒内输入,然后其变量进行赋值

ming@ming-pc-xiao:~$ read -p "Please keyin your name: " -t 30 named
Please keyin your name: 

环境配置文件

/etc/profile

当登录shell的时候,会读取该文件

/etc/profile

该文件将会设置目录

在读取完成以后,将会调用~/.profile,

管道命令

数据流。既传送给目录,右传送给设备

ming@ming-pc-xiao:~$ ls -l /home |  tee ~/homefile |  more
总用量 4
drwxrwxrwx 57 ming ming 4096 2月  19 05:02 ming
ming@ming-pc-xiao:~$ cat ./homefile 
总用量 4
drwxrwxrwx 57 ming ming 4096 2月  19 05:02 ming
ming@ming-pc-xiao:~$ 

shell script

hello world

全部如下

#! /bin/bash
# Program:
#    这是shell命令的hello world
# 时间  2018年02月19日
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
# 设置环境变量
export PATH
# 输出 其中e为转义字符
echo -e  "hello world" \a \n
# 退出脚本
exit 0
~                                                                               
~                

执行效果如下

ming@ming-pc-xiao:~$ sh ./hello.sh 
-e hello world a n
ming@ming-pc-xiao:~$ 

一些栗子

根据输入者输入的内容,保存相关内容

ming@ming-pc-xiao:~$ sh ./showname.sh   rr  ee
请输入您的姓名rer
请输入第二个名字trtg

rer trtg

ming@ming-pc-xiao:~$ 

#! /bin/bash
# Program:
# 输入使用者的姓名
# History:
# 2018/02/19
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

read -p "请输入您的姓名" firstname  # 提示输入
read -p "请输入第二个名字" lastname
# 输出结果
echo  "\n${firstname} ${lastname}\n" 
~                                       

执行方式的差别

直接执行

ming@ming-pc-xiao:~$ sh ./showname.sh   rr  ee
请输入您的姓名rer
请输入第二个名字trtg

rer trtg


这样可以进行直接执行

test指令测试

ming@ming-pc-xiao:~$ test -e /dmtsai && echo "exist" || echo "Not exist"
Not exist
ming@ming-pc-xiao:~$