`
shinfocom
  • 浏览: 1181439 次
文章分类
社区版块
存档分类
最新评论

[linux学习笔记]第3天:变量分类,重定向,管道命令,程序执行流,文本处理类命令, 正则表达式,短路操作符

 
阅读更多


变量的分类
本地变量: 只对本地有效,对子shell无效 // /bin/bash 打开子shell
环境变量: 对本地和子shell都有效
export A=3

A
export A
export //查看当前系统环境变量

printenv //类似export
env //显示当前环境变量

特殊变量:$?
ehco $? //上一个命令是否执行成功 0代表成功 1-255失败

位置参数变量: 需要用户通过命令引用,很有用的变量
$1,$2,$3 超过10时建议加{} ${11}
算数运算:
$[] //echo “$[$A+$B]”
$(( )) //echo "(($A+$B))"

写一个脚本,完成以下功能:
1、传递两个整数给脚本,让脚本分别计算并显示这两个整数的和、差、积、商。

\ //避免展开变量 echo "Your Salary : \$1" //该命令并不会显示$1的值,而是显示$1

BASH的命令别名
alias

例如将cls设置为lear方便使用
alias cls=clear
unlias cls
alias cdnet='cd /etc/sysconfig/network' //有空格用''

全局变量:/etc/profile, /etc/profild.d/*, /etc/bashrc 对所有用户都作用

/etc/bashrc //可设置alias对所有用户有效
/etc/profild.d/* //将profile分成片便于管理
/etc/profild //设置全局有效变量,永久有效
export DFSF=dfsf //需注销才生效
source /etc/profile //重读profile,可立刻生效,不建议
局部变量: ~/.bash_profile, ~/.bashrc ~/.bash_logout 只对当前用户有效
profile类:
1.设置环境变量
2.运行用户登录时要执行的一些命令
bashrc类
1.设置别名
2.设定本地变量
-------------------------------------------------------------------------------------------------
shell分类:
1.交互式登录式shell
用户登录进去输入命令
过程:
/etc/profile --> /etc/profile.d/* --> ~/.bash_profile --> /etc/bashrc
2.非登录式shell
脚本执行过程中,系统自动运行,不需要用户登录输入命令
过程:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/×

——————————————————————————————————————————————————

输入/输出重定向,管道 输出流
I/O重定向分为:

标准输入 :/dev/stdin, 0, KEYBOARD,< //平常可以不输入
标准输出 :/dev/stdout, 1, MONITOR, > //命令正常执行 cat > /tmp/ls1.out
错误输出 :/dev/stderr, 2, MONITOR, 2>//命令错误执行 cat 2> /tmp/ls2.out
//lessss &> /tmp/ls3.out //&> 合并>和2>

例如

ls /var >> /tmp/var.out 2>> /tmp/var.err //正确的信息存在var.out,错误的在var.err

其他的重定向
> //覆盖输出重定向
>> //追加输出重定向
set -C //开启避面覆盖重定向
set +C //关闭
>| //强制覆盖

自定义输出重定向
exec 3> /tmp/myout.out //实现多次重定向到一个文件,避免多次打开关闭一个文件,提升脚本执行效率
>> //追加
< //读入
ls /var >&3
exec 3>&- //关闭文件

写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容;(提示:LINE=`head -2 /etc/passwd | tail -1`可以取得第2行)
3、把这些行保存至/tmp/mypasswd文件中

————————————————————————————————————————————————————————————————————————

管道 | : 把第一个命令的输出送到第二个命令处理
echo "123456" | passwd --stdin rehat //这个命令将123456交给passwd来处理,--stdin参数会使123456立刻生效成为用户redhat的密码
ls /etc | tee /tmp/ls.out | less //tee可以把输出流保存到指定文件 并交给下一个命令处理
多个命令的输出都需要保存至同一个文件
command >> a.out
command >> a.out

/dev/nullnull 指空文件,任何被放到Null的数据都被删除,在linux里是一个常用的命令,可以轻松去除输出结果,不过要小心使用

比如:ls/var/ttt&>/dev/null //无论结果如何,都输出到null里,不会显示结果
——————————————————————————————————————————————————

程序执行流

分类:
顺序执行
选择分支
循环执行 //这一次只学习for循环
for I in LIST ; do //LIST是这个循环的条件,也叫做列表,可以是字符,数字,表达式
statement1
statement2
done

列表分类:
简单列表: 1 2 3 4

复杂列表: This is TOM`s cat
命令 : `ls /var`
通配符 : for I in /var/*


例如:
for LINE in `cat /etc/passwd`: dao
而外说明
IFS=$'\n' //for 循环只是别换行符

写一个脚本:添加10个用户user1-10

文本处理类命令cut -d: -d""

//指定分隔符:或"" -f //指定第几段

grep与正则表达式

grep: 全面搜索正则表达式并打印出来
grep,egrep,fgrep

grep [options] "PATTERN“ file... //grep的用法
-i //不区分大小写
-v //显示没有匹配到模式的行
-n //显示匹配的行在原文中所处的行号
-An //显示后n行
-Bn //显示前n行
-Cn //上下文,显示上线n行
--color //把匹配的高亮显示
模式

正则表达式,元字符 re
^ //锚定行首 ^love love必须在行首
$ //锚定行尾
. //用于匹配任意单个字符
* //root* *前的t可以出现0次或任意次

[] //匹配一组字符中任意一个
\
\< //词首定位符
\> //词尾定位符
x\(m)\ //x精确出现m次
x\(m,)\ //x至少出现m次
x\(m,n) //x至少出现m次,最多m次
\(...)\ //任意长度的任意字符

grep -E = egrep
+ 相当于\{1,\}
? 相当于\{0,1}\
| 或
’love|hate‘ e或h谁出现都行

grep练习

————————————————————————————————————————————————————————————————————————
短路操作符
&& //与运算,当你需要判断使用两条命令是,使用&&: 如果第一个运行结果错误,那么继续运行第二个命令,结果为第二个命令,

如果第一个命令正确,那么将不会在运行第二个命令
1 && ? = ?
0 && ? = 0
|| //或运算,使用|| : 如果第一个命令结果错误,那么结果直接为第一个命令,

如果第一个命令结果正确,那么结果为第二个命令
1 || ? = 1
0 || ? = ?

##结合/dev/null的使用,将会发挥很重要的效果

例如 cat /tmp/aaa >> /tmp bbb || cat /tmp/aaa &>/dev/null

##这个命令,如果aaa不存在的话,将会直接将结果输出到/dev/null下,而不会占用系统资源输出错误信息

写一个脚本:
1、添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加;


编程语言:
脚本语言:bash,perl(语言学家),python(灵活,简洁),ruby,php
以源程序的方式存在,执行前不需要编译,而是靠一个解释器执行
维护简便
执行效率差

编译型语言:
编辑-->编译-->链接-->运行


脚本:命令的堆砌
#!/bin/bash //第一行标准 shebang
#

nano myscript.sh
chmod +x myscript.sh
./myscript.sh //执行脚本

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics