file 显示文件内容类型
命令引用 file `cat /etc/shells` 可以用file命令执行后面的内容
ls 显示文件类型
cat 显示文件内容
#cat /etc/passwd
root :x : 0 :0 :root:/root:/bin/bash
用户名 用户ID 组ID
ls -ld
echo
** 修改虚拟机ip地址的方法:ifconfig eth0 地址
编程语言:
动态语言(脚本语言)
变量不需要事先声明
解释执行
编译--》执行
解释器:#!/bin/bash,
myseradd.sh
./myseradd.sh
bash myseradd.sh
shell,脚本编程语言 perl 语言,python 语言 完全面向对象,ruby 语言 完全面向对象
网页开发的脚本语言 jsp php asp
静态语言(编译型语言)
变量必须要声明,严格区分变量类型
编译后才能执行
编辑--》编译--》连接--》执行
变量:命名的内存空间
变量类型:
1、空间大小 2、数据的存储格式
3字符和数值区别
存储为字符:8bit,
为数据值:2bit
32444 字符 16bit
数据 40bit
整数:1
浮点数:1.234=
bash:数据值型,字符型,不支持浮点
2/3,圆整
声明变量:
A=3
declare -i A=0 初始化声明
declare
-i intrger
-x
set A=3 设置变量
unset A 撤销变量
变量类别:
本地变量 set这种方式就是声明本地变量,在整个脚本里面都有效,不能扩展到其他脚本
环境变量 export声明环境变量=dechare -s
特殊变量
位置变量
变量用完之后怎么处理:
声明一个变量:"MYPATH=/tmp/scripts a" 此时加引号
如何引用变量:变量替换
$(MYPATH)
$MYPATH
ANIMAL=pig
There are some $(ANIMAL)S.
总结引号:引用
"":弱引用
'':强引用
``:命令替换
"$(ANIMAL)" 显示数值
'$(ANIMAL)' 原封不动显示字符串
`$(ANIMAL)`
变量名的使用法则:
只能包含字母、数字、下划线,但是不能以数字开头
echo $VAR
shell,subshell 子shell
cat /etc/passwd 用户账户信息
cat /etc/shells 查看可用shell
echo $PATH 显示环境变量
导出环境变量的方法:
先声明变量,而后使用export 导出
使用export直接导出
ANIMAL=pig
export ANIMAL(变量)
环境变量和本地变量作用范围不一样
CLI:
bash--》
用户工作环境配置文件:
全局配置:
/etc/profile配置文件,/etc/profile.d/*,/etc/bashrc
个人配置
.bash_profile,~/.bashrc
profile类:交互式登录,用户生效
设置环境变量
运行一些命令或脚本
bashrc类:非交互式登录用户
设置本地变量
定义命令别名
交互式登录用户执行配置文件的过程:
/etc/profile --> /etc/profile.d/* --> ~/.bashrc --> /etc/bashrc
越靠后,生效的优先级越高
非交互式登录:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*
alias 定义别名
#set 查看所有本地和环境变量
#export 查看所有声明过的环境变量
#printenv 查看所有声明过的环境变量
关键的环境变量:
display 定义显示的屏幕
lang 声明当前语言环境(语言的编码gb2312)
path 定义到哪些命令下执行
export PATH=/usr/local/apache/bin:$PATH
USER
SHELL
HOSTNAME 主机名
不是环境变量 PS1= PS2 设置命令行中#前面显示内容
basename /usr/local/bin
~/.bash_profile
~/.bash_history
~/.bash_logout
输入/输出重定向和管道
标准输入,标准输出,标准错误输出,
STDIN STDOUT STDERR
0 1 2
键盘 监视器 监视器
输入输出重定向:
输出重定向:
>:覆盖输出 定义输出重定向 把原有内容覆盖 定义标准输出
>>:追加输出 不覆盖原有内容
2>:覆盖错误输出
2>>:不覆盖错误输出
&>:混合输出重定向
ls /var > /tmp/var.out 2> /tmp/var.err
ls /var >> /tmp/var.out 2>> /tmp/var.err
set -C 不允许覆盖输出
set +C 允许覆盖输出
/dev/null 数据黑洞
eg ls /var
ls /var >/tmp/var.out
cat !$
管道:
把一个命令的输出当做另一个命令的输入
COMMAND1 | COMMAND2 | COMMAND3
**file命令不能接受cat传送过来的命令 cat /etc/shells | file
eg
ls -l /etc | less 把ls的输出当做less的输入 实现分页查看
tee 即显示 又输出
tr 'a-z' 'A-Z' 把小写字母全部换成大写字母
输入重定向
<
here document
<<
用于脚本当中生成一个文件使用。
< 1 显示当前系统上第2块网卡eth1的IP地址,如果发生错误,则重定向至/dev/null 2 显示/var/目录下的所有文件或子目录,但是要把所有字母换成大写 3 以一个命令显示当前系统上所有可用shell对应的可执行文件的文件内容类型,并让结果以全大写的方式显示 文本过滤: grep --color '' 把搜索结果带颜色 问 显示/etc/sysconfig 如何精确匹配IP地址: grep --color "\(l..e\).*\lr" test.txt \1表示引用第一个左括号中内容 grep --color "^[sS]" /proc/meminfo grep --color "nologin$" /etc/passwd grep --color "^#[[:space:]]\{1,\}.*" /etc/inittab grep --color ":[0-9]:" /etc/inittab grep --color "^[[:space:]]\{1,\}" /boot/grub/grub.conf ifconfig | grep -0 --color "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1.3\}" | grep -v "127.0." | grep -v "255." grep -v --color "^$" /etc/inittab 非空白行 不支持:\{\} {} ^ $ * [] + :匹配其前导字符1次或多次 ?: 匹配其前导字符1次或0次 | : 表示或者 a|b a或者b grep -E "^(s|S)" / (): 分组 (ab)* {}: 指定次数==基本正则里的\{\} cut: -r 降序 wc 希望显示There are 70 users. wc -l /etc/passwd | cut -d' ' -f1 diff/patch tr tr -d 'ab' 删除有ab的行 grep "^[^[:space:]]" 第一个^是锚定行首 第二个^表示否定 脚本编程: 顺序执行 跳转(一般不用) 循环执行 for循环的用法: user1,user50 for VAR in LIST; do 遍历式的执行: LIST的生成方法: 加法运算的方法: + - * / %
EOF 表示结束
ifconfig eth1 2> /dev/null
ls /var | tr 'a-z' 'A-Z'
file `cat /etc/shells` | tr 'a-z' 'A-Z'
文本处理:
grep,egrep扩展的正则匹配,fgrep不支持正则匹配,只作字符匹配
grep 'PATTERN' FILE1
-E 扩展正则表达式
-v 反向过滤 匹配到的不显示
-i 忽略字符大小写
-An after
-Bn befor
-Cn
-o 只显示匹配到的串本身,不显示串的那一行
[[:space:]] 表示空白字符
RE:正则表达式,包含几个元字符
globbing
*
[]
[^]
两类:
基本正则表达式
^ 行首锚定符(脱字符) grep '^bin' /etc/shells
$ 行尾锚定符 grep 'bin$' /etc/shells
^$ 空白行
. 匹配任意单个字符
* 匹配其前任意次(0,1,或多次) a*b ab aab acb 全都符合
.* 匹配 任意长度的任意字符
x\{m,n\} x至少出现m次,至多出现n次
a.b grep "a\.b"
\<词首锚定符\<,\b
\>词尾锚定符\>,\b grep "love.*"
\(\)
[[:space:]]
[[:punct:]]
*尽可能长的匹配
grep --color "l\([15]\):\l:.*\l$" inittab
.*[^[:space]]$
grep --color "\(^[0-9]).*\1$" /etc/inittab
grep --color "" /etc/sysconfig/network-scripts/ifcfg-eth0
扩展正则表达式:
egrep
-d' ' 表示以空格为分隔符 分隔符 -d: 以冒号为分隔符
-f1 第一段 1,3 一段和第三段 1-3 一段到三段
文件排序:
sort
sort [options] file(s)
-n 按数值大小
-u 去除重复= uniq 把连续的重复的行去除
uniq
-u 只显示曾经不重复的行
-d 只显示曾经重复过的行
统计命令行数
-l 只显示行数
-w 只显示单词数
-c 只显示字符数
上面表示段首非空
选择分支(条件判断)
循环执行
for
while
until
1+...+100
statement1
statement2
done
`seq 1 100` 表示1-100
{1..100}
`cat /etc/shells` (注意:如果某一行中间有空格的话,此行可能被识别成多行)
seq 1 2 99 表示奇数 2表示步进长度
let
C=$[$A+$B]
C=$(($A+$B))