shell ,process ,prompt 进程都是由其父进程fork自身而来
#bash ,子shell

本地变量:
环境变量:


变量:变量类型:
整数;-128--127
字符;123则占3bit
浮点;3.333=3333*10^-3
布尔型;true or false

bash 一般不支持浮点型

圆整:3/2= 1
去掉小数点后面的数字,进而取整;

shell:
内部命令;
外部命令;

which +command  查找命令的位置:

[root@localhost scripts]# which ls
alias ls='ls --color=tty'
 /bin/ls
 
系统定义的环境变量:
export
printenv


定义变量:
VARIABLE_NAME_NAME
export -x VARIABLE_NAME
declare -x VARIABLE_NAME
   -i ×××integer
   -a  数组array
unuset 撤销一个变量;

哪些文件可以为shell  提供配置:

全局配置文件:
/etc/profile,
/etc/profile.d/*
/etc/bashrc

个人配置文件:
~/.bash_profile
~/.bashrc
~/.bash_logout

shell的类型:
   交互式登陆shell:
     /etc/profile/--->/etc/profile.d/* -->~/.profile -->~/.bashrc/
   非交互式登陆shell
     ~/.bashrc-->//etc/bashrc-->/etc/profile.d/*
  su -
     执行脚本的shell 
     图形界面下的shell


profile 文件定义:
1.设定环境变量
2.用户登陆之前执行一些命令

bashrc类文件定义:
1.本地变量
2.命令别名

path命令用于在shell中键入的命令对应的可执行文件的搜索路径

export $PATH :/root
export PATH=root:$PATH

添加新shell执行:export PATH=$PATH :+路径

locale -a  显示当前系统上支持的所有字符集

export LANG= 设置语言

internationallization =i18n

/etc/sysconfig/i18n 定义系统字符集

source /etc/profile 读一下profile这个文件,来更新shell的环境变量
. /etc/profile 读一下这个profile文件,来更新shell的环境变量

 

当前的环境变量:
[root@localhost ~]# export
declare -x CVS_RSH="ssh"
declare -x DISPLAY="localhost:10.0"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/root/Desktop/wangzhen/scripts"
declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_CLIENT="192.168.0.209 49310 22"
declare -x SSH_CONNECTION="192.168.0.209 49310 192.168.0.33 22"
declare -x SSH_TTY="/dev/pts/1"
declare -x TERM="xterm"
declare -x USER="root"

 

[root@localhost ~]# set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=74
CVS_RSH=ssh
DIRSTACK=()
DISPLAY=localhost:11.0
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=i686
IFS=$' \t\n'
INPUTRC=/etc/inputrc
LANG=en_US.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LINES=22
LOGNAME=root
LS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'
MACHTYPE=i686-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=15621
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SSH_CLIENT='192.168.0.209 50585 22'
SSH_CONNECTION='192.168.0.209 50585 192.168.0.33 22'
SSH_TTY=/dev/pts/2
TERM=xterm
UID=0
USER=root
_='hello,welcome to my system!'
consoletype=pty


命令别名:

alias name='command'

给系统命令重命名:
alias newcommand = command


cut 使用方法,分割字段:
-d 后面跟分割的字符
-f 后面跟以某字符为分割的第几个字段
例子:
[root@localhost shell]# cat /etc/passwd
user1:x:521:521::/home/user1:/bin/bash
redhat:x:522:522::/home/redhat:/bin/bash
user2:x:523:523::/home/user2:/bin/bash
user3:x:524:524::/home/user3:/bin/bash
user4:x:525:525::/home/user4:/bin/bash
user5:x:526:526::/home/user5:/bin/bash
user6:x:527:527::/home/user6:/bin/bash
user7:x:528:528::/home/user7:/bin/bash
user8:x:529:529::/home/user8:/bin/bash
user9:x:530:530::/home/user9:/bin/bash
user10:x:531:531::/home/user10:/bin/bash

[root@localhost shell]# cat /etc/passwd | cut -d x -f1

user1:
redhat:
user2:
user3:
user4:
user5:
user6:
user7:
user8:
user9:
user10:
去除重名名:
unalias newcommand
  例子:
  alias cls = clear
   unalis = cls
  
  
  
测试shell:
bash -n +shell文件
-n  可以测试shell的语法错误
执行shell:
bash shell文件

shell脚本文件若引用最后需要unset撤销引用;
其中需要错误重定向,不然错误会输出在屏幕上;
&> /dev/null
将错误信息输出在 /dev/null


选择
循环

   for:循环次数已知
   while:
   until
循环必须有推出条件:

for循环推出条件

  for VAR in LIST;
   do statement1;
   do statement2;
  done

 
如何定义列表:
1、简单列出
2、{1..10}
3、·seq 1 10·
4、·cat /etc/passwd·

bash -n first.sh 对脚本进行语法检查
bash -v first.sh 对脚本的每个原始命令及其执行结果
bash -x first.sh 对脚本以测试模式执行

set -x :显示由shell执行的命令及其参数
set -v :显示由shell读入的命令行
set -n :读取命令但不执行他们,用于语法检查

 

vim 文本编辑器:

vi improved= vim

编辑模式:(命令模式)

输入模式:

末行模式:


vim + n file 打开文件后进入第几行

vim +/字符(pattern)/ file


编辑模式--》输入模式;
i:insert,在当前光标之前输入字符;
a:append(追加),在当前光标之后输入字符
I:在当前光标所在行行首,进行操作
A:在当前光标所在行行尾,进行操作
o:光标所在行的下方打开一个新行,进行操作
O:在光标所在行的上方打开一个新行,进行操作

输入模式--》编辑模式  :敲击ESC键

编辑模式--》到末行模式:
:冒号进入末行模式

例子:
:set nu 指在末行模式在 为文本设置行号
:set nonu 取消行号
末行模式-->编辑模式
末行模式双按ESC键进入编辑模式

退出文本:
末行模式:1、保存退出   :wq   :wqall 
ZZ  若文本么有改变,则不保存离开,若文件被改动,则还保存退出
:q!文件改变,强制离开且不保存文件

 

 

一般模式下的操作:


光标移动:
H键向左移动          
L键向右移动
J键向下移动
K键向上移动

              K
        H          L
              J

G 跳到文件最后一行
5G表示跳到文件第5行

gg跳到文件首行,==1G

N enter 5 ENTER即向下跳5行

N space 5 space即光标向此行移动5个字符

0键、HOME键移动 到行首
$、END键移动到行尾


翻屏
ctrl + f 向下翻一屏
ctrl + b 向上翻一屏
ctrl + d 向下半屏
ctrl + u 向上半屏

删除字符:

x 向后删除一个 字符
X 向前删除一个字符
5x  向后删除5个字符

dd 删除一整行
d$ 删除光标到行尾的字符
dG 删除光标到最后一行的数据

R替换:
replace

r替换光标处的字符

X 向前删除一个字符


撤销:
u(undo)撤销最近一次的操作
5u 撤销最近5次的操作
ctrl + r 撤销刚才的撤销操作

点  . 重复前一个操作
 

复制:
yy  复制正行
5yy  向下复制5行

y1G 复制光标所在行到第一行的数据
yG  复制光标所在行到最后一行的数据

y0  复制光标所在位置到行首的数据
y$  复制光标所在位置到行尾的数据

粘贴:
p  将复制的数据 粘贴在所在光标的下一行
P  将复制的数据 粘贴在所在光标的上一行

可视化模式:通过拖动鼠标进行操作
v 键进入按字符选取
V 键进入按行选取

查找:

less /?

/keyword

?keyword
n/N  查找下一个 

替换:substitude
flags:
i:ignore 忽略大小写
g:global  全局
% 代表全文
@和#代表 /
m,n 从m行到n行

文件名+s/查找的内容/替换的内容/+flags(参数)


一次打开多个文件切换:
末行模式下 输入:next 显示下一篇
输入:perv 显示上一个

显示第一个:first
显示最后一个:last

比较文件时可以,分割窗口:
水平分割:ctrl + w 再按 s
垂直分割:ctrl + w 再按 w

ctrl + w ,再按 wasd四个方向键切换窗口

ctrl + w
ctrl + w
ctrl + w
ctrl + w

显示时,分割多个文件:
-o :水平分割
-O :垂直分割

设定vim的工作属性:

末行模式下:
:set nu 显示行号
:set nonu 取消行号
: set ai(autoindent)自动缩进
:set noai
只对当前vim有效!!

vim配置文件:
全局配置文件: /etc/vimrc
个人配置文件: ~/.vimrc


语法高亮(sytax):
显示颜色的不同
sytax on | off

搜索高亮:
:fset hlsearch


bash shell 算数运算:
+
-
*
%

let A=2+3
echo $A


算数运算:
1、let [算式]
2、$[算式]
3、$((算式))
4、expr

例子:
let [2+3]
echo $A


....


语句的逻辑运算:
命令退出码:0 正确   1错误

&& 与
A && B  若结果为真则运算得0  若结果为错误则运算得1
有一为假则结果为假
|| 或
有一为真则结果为真 
! 非