添加10个用户
1 |
|
添加用户debian,gentoo,ubuntu
1 |
|
如何设置多个条件
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1] && [ $# -le 3 ]
当用户输入q或Q或quit或Quit:退出
if [ $1 == 'q' -o 'Q' -o 'quit' -o 'Quit' ];then
echo "Quiting"
exit 0
else
echo "Unknown Error"
1 |
|
1 |
|
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1] && [ $# -le 3 ]
当用户输入q或Q或quit或Quit:退出
if [ $1 == 'q' -o 'Q' -o 'quit' -o 'Quit' ];then
echo "Quiting"
exit 0
else
echo "Unknown Error"
末行模式下:
.:表示当前行
$:最后一行
+#:向下的#行
1,$ y 复制1至最后一行
c:修改:
cc + 新内容 这种方式是会直接把行内容删除,然后再插入模式下添加新内容
r:替换:
r + 内容 这个一般用于单字符的修改
6r + a: 就会把当前字符的后6个替换成a
R:替换:
在文本中直接替换,这个用的多!!!!!!!!!!
u:撤销
最多撤销50次;;;
ctrl + r:还原撤销
. :重复前一次编辑操作
/PATTERN:查找
?PATTERN:向前查找
敲n指向下一个
可视化模式
v:按单个字符进行选取
V:按整行进行选取
查找并替换:
和sed命令一样
1,5s/PATTERN1/PARRERN2/gi(i是忽略大小写)
s/#//
s/#//g
%:表示全文
vim file1 file2
:next 切换下一个
:prev 切换上一个
:last 最后一个
:first 第一个
:qa 全部退出
分屏显示:
即windows下words的分屏操作
ctrl + w,s :水平分割,先按ctrl+w,松开,再按s
ctrl +w ,v:垂直分割(Vertical)
实现窗口的切换 ctrl + w+ 方向键
分窗口显示多个文件:
vim -o 水平分割
-O 垂直分割
实现窗口的切换 ctrl + w+ 方向键
将另外一个文件的内容填充到当前文件中
:r file
:set ic (忽略大小写)
:set noic(取消忽略大小写)
:set autoindent or set ai (设置自动缩进)
:set noai(取消自动缩进)
查找到的为虐你高亮显示或取消
set hlsearch
set nohlsearch
语法高亮
syntax on
syntax off
练习:
%s/ftp://instructor.example.com/pub/http://172.16.0.1/yum/g
vim /etc/fstab ,然后 :5,9 w ~/fstab
==:测试字符串是否相等 (其实 = 也可以,不过一般不用这种)
such as: A=hello B=hi [ $A == $B ] echo $?(注意,等号前后A和B要有空格)
!=:用来测试是否不等,不等为真,否则为假;
>: 大于
<: 小于(一般这两个不用)
-n string:测试指定字符串是否为空,空则真,不空为假;
-s string:测试指定字符串是否不空,不空为真,空为假;
1 | #!/bin/bash |
传递三个参数给脚本,第一个为整数,第二个为算数运算符,第三个为整数,将其结果显示出来,要求保留两位精度;形如:./cal.sh 5/2
1 | #!/bin/bash |
1 | for while until |
1 | #!/bin/bash |
1 | #!/bin/bash |
1 | #!/bin/bash |
(补充说明,这个脚本不完善,准确来说,这个脚本即使在用户存在的条件下也可以跳过执行其他的)
1 | #!/bin/bash |
1 | #!/bin/bash |
grep/sed/awk
sed(流编辑器):
stream edittor
行编辑器 vim:全屏编辑器
逐行处理
sed:模式空间
默认情况下不编辑原文件,仅对模式空间中的数据做处理,
而后,处理结束后,将模式空间打印到屏幕上;
sed [options]”AddressCommand“ file…
-n:静默模式,不再默认显示模式空间中的内容
-i:直接修改原文件
-e:SCRIPT -e SCRIPT:可以同时-e ‘AddressCommand’ -e ‘AddressCommand’
-f: /PATH/TO/SED_SCRIPT
sed -f /path/to/script file (就是拿路径下的脚本对file进行操作)
-r:表示使用扩展正则表达式
或者:
sed ‘AddressCommand’ file…(两者的区别,在于需不需要转义)
Address:
Command:
d:删除符合条件的行;
(比如删除/etc/fstab的前两行 sed “1,2d” /etc/fstab)
(比如删除第3行至最后一行,sed ‘3,$d’ /etc/fstab,,(补充,换成“”就会出错))
(比如包含dev的行都给删除掉,sed ‘/dev/d’ /etc/fstab)
(比如删除从第1行往后两行,sed ‘1,+2d’ /etc/fstab)
(比如删除含有/dev的行, sed ‘/dev//d’ /etc/fstab)
(比如删除含有/dev/的行,sed ‘//dev//d’ /etc/fstab(补充,如这两个,要进行转义))
p:显示符合条件的行
(比如显示文件中(a.txt只有a,b,c,d)中的a, sed ‘/a/p’ a.txt,会把符合条件的显示两遍,
而不符合的,也会显示出来,这个就叫做在模式空间中符合条件的打印出来,但同时也会把原文件打印出来,
而删除会在模式空间中把文件中符合条件的删除后进行显示,所以不会有这种情况,所以,为了只显示符合条件
的内容,使用-n选项,即上面说的静默模式)
a \string:在指定的行后面追加新行,内容为”string”
(比如最前面是/的前面添加# hello world以及换行添加hello Easy,sed ‘/^//a # hello world \n hello Easy ‘ /etc/fstab)
i \string:在指定的行前面添加新行,内容为string
r filename:将指定的文件的内容添加至符合条件的行处
(比如,将/etc/login.defs文件内容添加至/etc/fstab的第2行处,sed ‘2r /etc/login.defs’ /etc/fstab)
(比如,添加到最后,sed ‘$r /etc/login.defs’ /etc/fstab)
w filename:将指定范围内的内容另存至指定的文件中;
(比如,将/etc/fstab 中含有oot行存至/tmp/oot.txt,,sed ‘/oot/w /tmp/oot.txt’ /etc/fstab)
s /pattern/string/:查找并替换每一行中第一次被模式匹配到的串
(查找/etc/fstab中含有oot的字符换为OOT,,sed ‘s/oot/OOT’ /etc/fstab)
如果每一行中所有含有oot的都替换,可以加
修饰符:
g(全局替换) sed ‘s/oot/OOT/g’ /etc/fstab
i(忽略大小写)
(比如要替换文件中凡是含有l..e的字符替换成l..er,(如like要替换成liker) sed ‘s/l..e/&r/g’ /etc/fstab)
(比如要替换所有l..e的字符替换成L..e(like换成Like) sed ‘s/l(..e)\L\1/g’ /etc/fstab)(后项引用)
练习:
文件测试:
-e file :测试文件是否存在
-f file :测试文件是否为普通文件
-d file:测试指定路径是否为目录
-r file:测试当前指定文件是否具有读取权限
-w :测试当前指定文件是否具有写权限
-x :测试当前指定文件是否具有执行权限
定义脚本退出状态码
exit命令:
1 | if ! grep user1 /etc/passwd &>/dev/null ; then |
1 | #!/bin/bash |
bash -n file.sh:用来测试脚本是否有错误
bash -x file.sh:单步执行脚本(用来查看bash是怎么执行这个脚本的,可用于查错)
练习:
给定一个文件;
如果是一个普通文件,就显示之;
如果是一个目录,亦显示之;
否则,此为无法识别此文件
1 | #!/bin/bash |
或者:
1 | if [ ! -e $FILE ];then |
位置变量:
./filetest.sh /etc/passwd /etc/login.defs
$1:/etc/inittab
$2:/etc/passwd
such as:
1 | #!/bin/bash |
练习:
1 | #!/bin/bash |
1 | #!/bin/bash shift1.sh 关于shift,参考05_02 |
算数运算:
A=3
B=4
let C=$A+$B
C=$[$A+$B]
C=$(($A+$B))
C=
expr $A + $B
(注意格式)
练习:
判断当前系统上是否有用户的默认shell为bash
如果有,就显示有多少这类用户,否则,就显示没有这类用户
1 | #!/bin/bash |
给定一个文件,比如/etc/inittab
判定这个文件中是否有空白行
如果有,则显示其空白行数,否则,显示没有空白行
1 | #!/bin/bash |
给定一个用户,判断其UID和GID是否相等
如果一样,显示此用户为“good boy” 否则“bad boy”
1 | #!/bin/bash |
给定一个用户,获取其密码警告期限
而后判断用户最近一次修改密码的时间距今天是否已经小于警告期限;
如果小于,则显示“Warning”,否则“OK”
1 | #!/bin/bash |
判定命令历史中历史命令的总条目是否大于1000,如果大于,显示”Some command will gone”;否则显示”OK”
1 | #!/bin/bash |
条件判断:
如果用户不存在:
添加用户,给密码并显示添加成功
否则:
显示如果已经存在,不用添加
bash中如何实现条件判断?
条件测试类型:
整数测试
字符测试
文件测试
条件测试表达式:
[expression]
[[expression]]
test expression
整数测试:
-eq:测试两个整数是否相等,比如[ $A -eq $B ] echo $?
-neq:测试两个整数是否不相等,
-gt(greater than):测试一个数是否大于另一个数,大于,为真;否则,为假
-lt(lower than):测试一个数是否小于一个数,小于,为真,否则,为假
-ge(greater equal):大于或等于
-le:小于或等于
逻辑关系;
逻辑与: && id user1 &> /dev/null && echo “Hello!”
逻辑或: || id user1 || useradd user6
逻辑非: !
变量名称:
- 只能包含字母,数字和下划线,并且不能数字开头;
- 不应该跟系统中已有的环境变量重名
1 | #!/bin/bash |
练习:
id user2 &>/dev/null && echo “user2 had exited” || useradd -m user2 && echo “user2” | passwd –stdin user2 &>/dev/null &&echo “exited”
! id user2 && useradd user2 || echo “exited”
给定一个用户:
1.如果其UID为0,就显示此为管理员
2.否则,就显示其为普通用户
1 | #!/bin/bash |
练习:如上
1 | #!/bin/bash |
1 | #!/bin/bash |
系统设定
默认输入设备:标准输入,STDIN,0
默认输出设备:标准输出,STDOUT ,1
标准错误输出:STDERR 2
Linux:
>:覆盖输出
>>:追加输出
如果覆盖输出怕已存在的文件被覆盖,可以使用命令set -C来设置关闭
已存在内容的文件被覆盖,取消相应的set +C表示关闭此功能;
如果要强行覆盖,可以在>后面加个|
such as:
1 | #cat /etc/fstab |
2>:重定向错误输出
2>>:追加定向错误输出
ls /var > var.out 2>var.out
&>:重定向标准输出或错误输出至同一个文件:
ls /var &> var.out
<:输入重定向
tr a-z A-Z < /etc/inittab
<<:
cat << END
此处可编写内容
END
cat <<EOF(end of file ,和END一样)
cat >> /tmp/myfile.txt << EOF
这个会在当前编写的东西保存到/tmp/myfile.txt
当然,有可能会遇到一种情况,就是写的内容要保存一份,但是
也要在当前窗口进行输出,
echo “Hello World.” | tee /tmp/hello.out
管道:前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 命令3 …
cut -d: -f3 /etc/passwd | sort -n | tr a-z A-Z
练习:
#ls -l /usr/bin | wc -l
#cut -d: -f7 /etc/passwd | sort -u
#file /var/log/*
#head -6 /etc/inittab | tail -1 (man tail -n选项)
#tail -9 /etc/passwd | head -1 | cut -d: -f 1,7 | tee /tmp/users
#ls /etc | grep pa | wc -l
用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间
–用户名
–密码
–从1970年1月1日起到上次修改密码所经过的天数
–密码再过几天可以被变更(0表示随时可以改变)
–密码再过几天必须被变更(99999表示永不过期)
–密码过期前几天提醒用户(默认为一周)
–密码过期几天后帐号被禁用
–从1970年1月1日算起,多少天后账号失效
-u UID(>=500)
-g GID
-G 附加组1,附加组2
-c 注释信息
-d /path/to/somedirectory (可以自定义家目录名称)
-s 指定shell cat /etc/shells 可查看所有支持的shell
-m 创建家目录(强制创建,如果不存在)
不过一般要结合-k使用,-k:当创建用户的时候,用户的基本配置信息存放在/etc/skel目录下,会自动copy到你创建的目录里;
即使不指定,也是创建,不过使用,就会确保创建;;
-M 不创建家目录 /
-r 创建一个系统账号
useradd -c “Tony” -d /home/tony -s /sbin/nologin user4
所有默认的配置信息的配置方式,都保存/etc/login.defs
如果直接userdel,不会删除家目录
-r 删除家目录
查看用户的账号信息还有登陆时间;;;
-u UID
-g GID
-G -a GID 不使用 -a 选项,会覆盖此前的附加组,就是去除了此前的组;;
-d -m 指定新的家目录,并移动此前家目录下的内容至新家目录
-s shell
-l 改变登陆名称
-L 锁定账号
-U 解锁账号
-e 修改账号的有效时间 usermod -e 20150202 easyheart
-f 修改账号过期后多少天即关闭账号
usermod -e 20150202 -f 0 easyheart
改变用户的shell
chsh -s shell username
修改注释信息
比如会提示办公室、办公室号码等;;
–stdin (可以用于脚本自动执行) echo “redhat” | passwd –stdin xiaoming (小明的密码就自动设置好了)
-l 锁定账号
-u 解锁账号
-d 删除密码
可以用来检查密码文件的完整性
-g 指定GID
-r 添加一个系统组
-g GID
-n GRNAME
可以创建一个文件可以查看切换组了;;;
输入exit可以退出转换的组;;;
给组加密码
这个命令一般可用于当用户使用newgrp进行切换到其他组的时候,会提示输入密码,这个密码就是gpasswd
设定的密码,如果为空,自动切换,可以设定好密码进行切换
-d 指定密码最近一次的修改时间
-E:过期时间
-r:非活动时间
-m:最短使用期限
-M:最长使用期限
-W:警告时间
练习:
groupadd -g 3003 distro
groupadd linux
useradd -u 2002 -g distro -G linux mandriva
useradd -c “Fedora Community” -s /bin/tcsh fedora
usermod -u 4004 -g linux -G distro,fedora mandriva
passwd -n 2 -x 50 fedora
usermod -s /bin/bash mandriva
chsh /bin/bash mndriva
useradd -s /sbin/nologin hbase
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true