Linux bash脚本编程(二)

条件判断:
如果用户不存在
添加用户,给密码并显示添加成功;
否则
显示如果已经没在,没有添加;

bash中如何实现条件判断?
条件测试类型:
整数测试
字符测试
文件测试

条件测试的表达式:
[ expression ]
[[ expression ]]
test expression
整数比较:
-eq: equal to 测试两个整数是否相等;比如 $A -eq $B
-ne: not equal to 测试两个整数是否不等;不等,为真;相等,为假;
-gt: greater than 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt: less than 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge: greater than or equal to大于或等于
-le:less than or equal to 小于或等于

#!/bin/bash
A=`grep '^$' /etc/inittab | wc -l`
if [ $A -gt 0 ]; then
    echo "$A"
else
    echo "No blank line!"
fi

bash脚本编程(一)

bash脚本编程(一)

脚本:命令的堆砌,按实际需求,结合命令流程控制机制实现的源程序
变量类型:事先确定数据的存储格式和长度
1、字符
2、数值:整型、浮点型
3、真、假

bash的变量类型
1、本地变量
set VARNAME=VALUE 作用域为整个bash进程(局部变量)local VARNAME=VALUE 作用域为当前代码段
2、环境变量
作用域为当前shell进程及其子进程 export VARNAME=VALUE export:导出
3、位置变量
$1, $2, ...
shift
4、特殊变量
$?:上一个命令的执行状态返回值
程序执行,可能有两类返回值:
程序执行结果
程序状态返回代码(0-255)
0: 正确执行
1-255:错误执行,1,2,127系统预留;
$#:参数的个数
$*: 参数列表
$@:参数列表

撤消变量:
unset VARNAME
查看当shell中变量:
set
查看当前shell中的环境变量:
printenv
env
export

逻辑运算:与、或、非、异或
逻辑与: &&
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑或: ||

添加环境变量
echo $PATH 查看环境变量
export PATH=$PATH:/usr/local/apache/bin 添加/usr/local/apache/bin到环境变量后面
export PATH=/usr/local/apach/bin:$PATH 添加/usr/local/apache/bin到环境变量后面

Linux个人学习目标及计划

从上月的4月13日到今天为止,Linux已经学习一个月,才刚刚学到bash脚本编程。
现在已经在工作期间,虽然上班但是时间也比较充裕,有时候可以学习,然后晚上回家了继续学,虽然我也是学计算机的,但有些命令当时能记住过段时间就忘了,也可能年龄大了,但不管怎样必须坚持到底。
虽然当时学习是为了找份工作,但在我这4线城市,我的工资是撑不死饿不死的。
刚开始预计是4个月学完,看情况是不可能,就算是时间长也要继续。
嗯,学吧,最后看结果!!!

egrep以及正则表达式regexp(二)

正则表达式:
Basic REGEXP:基本
Extended REGEXP:扩展
grep:使用基本正则表达式定义的模式来过滤文本的命令;
-i
-v
-o
--color
-E: 使用扩展正则表达式
-A #:找出匹配内容并显示后几行
-B #:找出匹配内容并且显示前几行
-C #:找出匹配内容并显示前后几行
扩展正则表达式:
egrep = grep -E

字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意字符
[^]:匹配指定范围外的任意字符

次数匹配:
*:匹配前面字符任意次
?:匹配前面字符0次或者1次
+:匹配前面的字符至少1次
{m,n}匹配前面字符至少m次,之多n次

位置锚定:
^:锚定行首,其后面的字符必须出现在行首
$:锚定行尾,其后面的字符必须出现在行尾
\<或\b:锚定词首,其后面的字符必须出现在词首
\>或\b:锚定词尾,其前面的字符必须出现在词尾

分组:
():分组
\1, \2, \3, ...

|:或者 A|B 例:M|Modys M或者Modys

grep以及正则表达式regexp(一)

grep: 根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern: 文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE...]
-i 忽略大小写
--color 颜色标记
-v: 显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串

*: 任意长度的任意字符
?: 任意单个字符
[]:
[^]:
正则表达式:regular expression,简写REGEXP

元字符:
.:匹配任意单个字符
[]:匹配制定范围的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集:[:digit:] [:lower:] [:upper:] [:alpha:] [:space:] [:punct:] [:alnum:]

匹配次数(贪婪模式)
*:匹配其前面字符任意次数
.*:任意长度的任意字符
?:匹配其前面字符0次或1次
{m,n} 匹配其前面字符至少m次,至多n次。 m不可省略 {0,10} {0,}

位置锚定:
^:锚定行首,其后面任意字符必须作为行首出现
$:锚定行尾,其后面任意字符必须作为行尾出现
^$:空白行

\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现

分组:
()
(ab)*
后向引用
\1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2:
\3:

管道符和重定向以及tee命令的使用

管道符、重定向以及tee命令

管道 | :前一个命令的输出作为后一个命令的输入

或1> 输出重定向:把前面的内容输入到后面的文件中,会清除文件原有内容
或1>> 追加输出重定向:把前面输出的内容追加到后面文件的尾部,不会清除文件原有内容
2> 错误重定向:把错误信息输入到后边的文件中,会删除原有内容
2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除原有内容
<或0< 输入重定向:输入重定向用于改变命令的内容,后面指定输入内容,前面跟文件名
<或0<< 追加输入重定向:后面跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入 例如:cat >>test.py <<EOF 内容写完后 EOF结尾 就结束 必须用cat。echo不行
set -C:禁止对已经存在的文件使用覆盖重定向;强制输出则使用 >|
set +C:关闭上述功能

tee: 从标准输入读取并写入标准输出和文件
-a 附加给指定的文件,不覆盖
tee

ls_wc

bash的配置文件和登录式shell

bash的配置文件:
1、全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
2、非全局配置(个人配置)
~/.bash_profile, ~/.bashrc

profile类的文件:
设定环境变量
运行命令或者脚本

bashrc类文件:
设定本地变量
定义命令别名

登录式shell:
正常通过某终端登陆
su - UNSERNAME
su -l USERNAME

非登录式shell:
su USERNAME
图形界面下打开的命令终端
自动执行的shell脚本

登录式shell读取文件顺序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell读取顺序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

umask 遮罩码 定义文件或目录建立后的权限
文件:666-umask
目录:777-umask
如果不想让别人访问你的文件可设置umask为027
个人定义在 ~/.bask_profile
umask

重新登录即可

linux手动添加用户的方法

纯手动添加一个用户modys(UID 5000),基本组modys(GID 5000),附加组为aaa的账号
1、进入/etc/group 添加组

aaa:x:500:modys #把添加到aaa的附加组里
modys:x:5000:

2、进入/etc/passwd 添加用户

modys:x:5000:5000:MODYS:/home/modys:/bin/bash

3、把/etc/skel 复制到/home/modys 作为家目录

cp -r /etc/skel /home/modys

4、更改modys家目录的所有者为modys

 chown -R modys.modys /home/modys

5、进入/etc/shadow 添加密码及过期时间

6、设置密码,并加入到shadow中

openssl passwd -1 -salt '12345678'  #openssl工具命令行,-1位MD5加密,-salt加盐(杂质)
Password: 
$1$12345678$QV99PNIkeK7UDpbd1uZB0/

完成

快速添加用户

1、useradd modys
2、password modys

linux修改文件权限chmod的使用方法

chmod:修改文件的权限
修改三类用户的权限 -rwxrwxrwx=777
chmod 777 file,...
-R 包含目录及其内部文件全部修改
chmod --reference=/path/file file,...
chmod-777

修改某类用户的权限
u,g,o,a u=rx,g=rw,o=r,a=rwx
chmod a=rwx file,...
-R 包含目录及其内部文件全修改
chmod --reference=/path/file file,...
chmod ugoa=rwx

修改某位用户的某位权限或某些位权限
chmod ugoa+-rwx file,...
chmod ugoa+-rwx