https://blog.51cto.com/zero01/2046242
在shell编程中,如果使用了系统命令就要使用`
例.编写一个名为chname的程序,将当前目录下所有的.txt文件更名为.doc文件
(4)basename命令格式:
- basename [pathname] [suffix]
- basename [string] [suffix]
- suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
例.
basename /usr/bin/sort 输出"sort
basename ./include/stdio.h .h 输出"stdio"
为basename指定一个路径,basename命令会删掉所有的前缀包括最后一个slash(‘/’)字符,然后将字符串显示出来。
例.编写一个名为chuser的程序,执行中每隔5分钟检查指定的用户是否登录系统,用户名从命令行输入;如果指定的用户已经登录,则显示相关信息。
(1)who命令
打印当前都有谁登录到系统中的相关信息 。who命令只会显示真正登录到系统中的用户。它不会显示那些通过su命令切换用户的登录者。
(2)grep命令格式:
- grep pattern files 在files中查找pattern字符串(然后显示带有该字符串的行?)
- grep -i pattern files 不区分大小写地搜索。默认情况区分大小写
- grep -w pattern files 只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’)
这里还有些用于搜索的特殊符号:\< 和 \> 分别标注单词的开始与结尾。
例.
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
(3)| 运算符
- command 1 | command 2
他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2
(4)> 运算符
- echo “ff" > 文件 将输出的内容输入到指定文件,内容不显示到屏幕
- echo "hvkjvk" >/dev/null 将输出内容删除
采用重定向到 /dev/null 空文件的目的是不显示查找到的用户的其他信息
例.使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为:coaolvajcq_oldboy.html qnvuxvicni_oldboy.html
(1)seq
- seq 尾数
- seq 首数 尾数
- seq 首数 增量 尾数
- -w 在列前添加0 使得宽度相同
- -f --format=格式
以指定增量从首数开始打印数字到尾数,如果省略了首数或者增量,则默认其值为1。当首数小于尾数时增量一般为正值,
相反在首数大于尾数时增量一般为负数。
例.
要求宽度为3位,不足补零
seq -f "%03g" 98 101
输出:
seq -w 98 101
结果是一样的
(2)RANDOM
Linux的系统随机变量,是一个5位的随机数。
可用 RANDOM%一个数 来产生一个自己想要范围的随机数
在网上看到有人用 $RANDOM | md5sum | cut -c 1-10 生成一个10位的数字与a-f的随机串
- md5sum:用于生成和校验文件的md5值。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。
- cut:文件内容查看,显示行中的指定部分,删除文件中指定字段。-c:仅显示行中指定范围的字符。
例.批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。
(1)关于用户相关的shell语句
- useradd name 创建名为name的用户(adduser与之用法一样)
- useradd详解
- passwd 密码 name 为名为name的用户创建密码
- Linux中添加、修改和删除用户和用户组
(2)--stdin
这个选项用于从标准输入管道读入新的密码。
使用 echo 方式来重置Linux 系统用户密码:
echo “新密码” | passwd --stdin 用户名
(3)tee
tee [OPTION]... [FILE]...
[command] | tee -a [file] -a表示追加到文件,并不覆盖之前的内容
[command] | tee [file1] [file2] [file3] 写入多个文件
从标准输入中复制到每一个文件,并输出到标准输出。