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
有一为假则结果为假
|| 或
有一为真则结果为真
! 非