13_linux笔记-shell文本处理命令

13_linux笔记-shell文本处理命令


博客cpen_web

练习1 脚本 编写一个脚本,实现如下功能

#====================
1.增加用户并设置密码
2.删除用户
3.查看用户
4.退出
#====================
输入的指定不是1-4,给提示给予提醒,并且如果不输入退出的话,可以循环添加。
按1 增加用户,并且设置密码 useradd passwd
按2 删除用户 userdel -r
按3 查看用户 id
按4 退出 exit

示例1

menu(){									#(注:函数)
echo "===================="
echo "1.增加用户并增加密码"
echo "2.删除用户"
echo "3.查看用户"
echo "4.退出"
echo "===================="
read -p "请选择您所需要的服务:" ser
}
create_user(){							#(注:函数)
    read -p "创建用户名:" user1
    id $user1 &>/dev/null && echo "用户已存在!" && return	#(注:退出函数,接return)
    useradd $user1 &>/dev/null				#(注:导入黑洞文件)
    id $user1 &>/dev/null || return 	#(注:用户已存在 用Id 判断比较好。返回值非0可能是命令执行错误)
    read -s -p "设置密码:" passwd1			#(注:-s密码隐藏)
    echo $passwd1|passwd $user1 --stdin &>/dev/null
}
while :
do
menu				#(注:调用函数)
case $ser in			
1)
    clear			#(注:清空屏幕)
    create_user
    ;;
2)
# ……………………………………
4)
echo “退出!”
        exit
;;
*)							#(注:表示其他的所有选项,从上至下依次匹配)
echo “请输入1-4!”
esac
done

示例2:if 语法

    if ["$options"==1]||["$options"==2]||["$options"==3]||["$options"==4]
    then
        case $options in
        1)
            read -p "请输入用户名:" username
            if id $username &>/dev/null
            then
                echo "$username is exist!"
            else
                read -s -p "请设置密码:" password
                useradd $username &>/dev/null
                echo $password | $username --stdin &>/dev/null
                echo -e "\n create $username ok!"
            fi 
            ;;
# ……………………………………………………
        4)
            echo "退出!"
            exit
        esac
    else
        echo "请输入数字1或2或3或4!"
    fi

补充:&&可以连接2个命令

&&可以连接2个命令

[root@sanchuang-linux ~]# id chen222
uid=1017(chen222) gid=1017(chen222) 组=1017(chen222)
[root@sanchuang-linux ~]# id chen222 && echo "chen222存在"
uid=1017(chen222) gid=1017(chen222) 组=1017(chen222)
chen222存在
[root@sanchuang-linux ~]# id chen222 &>/dev/null && echo "chen222存在"
chen222存在

#注:用户已存在 用id 判断比较好。返回值非0可能是命令执行错误

知识点2 变量 全局/局部

Shell中定义的变量 默认全局变量
local a=10 局部变量

示例1:local 局部变量

func01(){
    local a=10
}

func01								#(注:调用函数)
echo $a
[root@sanchuang-linux chenpeng]# sh aaa.sh 
									#(注:为空。局部变量)

示例2:默认全局变量

func01(){
    a=10
}

func01								#(注:调用函数)
echo $a
[root@sanchuang-linux chenpeng]# sh aaa.sh 
10									#(注:全局变量)

知识点3 Python定义的变量 默认局部变量

Python定义的变量 默认局部变量
global a 全局变量

示例1:global a 全局变量

def func01():
    global a 				#(注:全局变量)
a = 10

func01()
print(a)
[root@sanchuang-linux ~]# python3 python_hanshu.py 
10

示例2:默认局部变量 只能在函数体内使用的变量

def func01():
a = 10

func01()
print(a)

[root@sanchuang-linux ~]# python3 python_hanshu.py 
Traceback (most recent call last):
  File "python_hanshu.py", line 5, in <module>
    print(a)
NameError: name 'a' is not defined				#(注:局部变量)

知识点4 shell函数里传参(位置变量)

示例

Shell里传参

func01(){
    a=100
    echo "$1 $2 $3"						#(注:函数的参数 [位置变量])
}
func01 第一个参数 第二个参数 第三个参数		#(注:调用参数)
echo $a

知识点4.2 python里传参

示例:python里传参

def func01(x,y):
    global a
    a = 10

func01(1,2)
print(a)

知识点5 test判断 等同于[]

示例:test

[root@sanchuang-linux chenpeng]# a=123
[root@sanchuang-linux chenpeng]# b=123
[root@sanchuang-linux chenpeng]# test a==b
[root@sanchuang-linux chenpeng]# test a==b && echo ok
ok

知识点6 判断方式 [] [[]] (()) test

·(( )) 判断数字 > < == !=
·[[ ]] 判断字符串 或者 -eq -ne -gt -lt 判断数字
·有些语法 [ ] 是不支持的,建议使用[[ ]]
·test(测试)判断,等同于1个中括号

示例:test

[root@sanchuang-linux ~]# a=123
[root@sanchuang-linux ~]# b=123
[root@sanchuang-linux ~]# test a==b && echo ok
ok
[root@sanchuang-linux ~]# test a==b && echo ok || echo error
ok

知识点7 连接运算

使用分号(;)实现一行中写多条语句

示例

[root@sanchuang-linux chenpeng]# echo "abc";echo "xyz"
abc
xyz

知识点8 函数

函数的定义/使用

示例

add(){
echo “两数相加为:$(( $num1 + $num2 ))}
Add

函数的传参

示例:位置参数传参

func01(){
    a=100
    echo "$1 $2 $3"
}

func01 第一个参数 第二个参数 第三个参数
echo $a

·函数内的变量定义 默认为全局变量
·使用local关键字 可以转换为局部变量

知识点9 seq命令

seq命令 类似于 python中的range函数
用途:打印出一串有序的数字
格式:seq [选项] 数字范围
-s:指定分隔符
-w:指定同等宽带输出

数字范围的展示:
[start] [step] end
start 和 step 都是选填的
step 为正,表示从小到大输出
step 为负,表示从大到小输出

示例1:[start] [step] end

[root@sanchuang-linux ~]# seq 3 -1 1			# 注:中间是步长。左右是起始位置
3
2
1
[root@sanchuang-linux ~]# seq 1 2 6
1
3
5
[root@sanchuang-linux ~]# seq 1 -2 6			# 注:步长为负数时,从1到6没有输出
[root@sanchuang-linux ~]# seq 6 -2 1
6
4
2

示例2:# seq 2 5 # seq -w 9 12

[root@sanchuang-linux ~]# seq 2 5
2
3
4
5
[root@localhost ~]# seq -w 9 12			# -w 指定同等宽度输出
09
10
11
12

补充 获取命令的返回结果
·使用反引号 ``
·或者 $()

示例3:获取/etc/passwd最后一行,赋给一个变量

[root@sanchuang-linux ~]# tail -n1 /etc/passwd				# 注:获取最后一行 # tail -n1
wtc:x:1029:1029::/home/wtc:/bin/bash
[root@sanchuang-linux ~]# line=`tail -n1 /etc/passwd`		# 注:方法1
[root@sanchuang-linux ~]# echo $line
wtc:x:1029:1029::/home/wtc:/bin/bash
[root@sanchuang-linux ~]# line1=$(tail -n1 /etc/passwd)		# 注:方法2
[root@sanchuang-linux ~]# echo $line1
wtc:x:1029:1029::/home/wtc:/bin/bash

示例4:seq命令 类似于 python中的range函数

[root@sanchuang-linux ~]# vim seq_test.sh
for i in `seq 2 10`		# 注:反引号 执行这个命令,获取命令的返回值
do						# 注:seq 2 10 包括2,包括10
    echo $i
done
for i in $(seq 2 10)		# 注:也表示执行这个命令,获取命令的返回值
do
    echo $i
done
[root@sanchuang-linux ~]# bash seq_test.sh 
2
3
4
5
6
7
8
9
10

示例5:-s:指定分隔符

[root@sanchuang-linux ~]# seq -s "+" 10			# -s:指定分隔符
1+2+3+4+5+6+7+8+9+10							# 注:不搞开头,默认情况下 从1开始,到10
[root@sanchuang-linux ~]# seq 10					#注:默认情况下 连接符是 换行符
1
2
3
4
5
6
7
8
9
10

练习10 创建用户(3次重试机会)脚本

示例:seq命令 创建失败 重试

[root@sanchuang-linux ~]# vim user_add.sh
#!/bin/bash
# 增加								# 注:用户增加的部分
add(){
    for i in `seq 3 -1 1`				# 注:seq 命令类似于pythonrange函数 3 2 1
    do
        echo "增加用户"
        read -p "请输入用户名:" username
       id $username &>/dev/null && echo "用户已存在,还有$(( $i - 1))次机会" && continue
       #if id $username &>/dev/null 
       #then
       #     echo "用户已存在,还有$(( $i -1 ))次机会"
       #     continue
       #fi  
       #useradd $username &>/dev/null && echo "创建成功!" && echo $password | passwd $username --stdin &>/dev/null && break || echo -e "\n创建失败!"
       if useradd $username &>/dev/null
       then
           echo "创建${username}成功!"
           read -s -p "请设置密码:" password
           echo $password | passwd $username --stdin &>/dev/null
           break
       else
           echo "创建失败!,还有$(($i-1))次机会!"
       fi
    done
}
# 删除
del(){
    echo "删除用户"
    read -p "请输入用户名:" username
    userdel -r $username &>/dev/null && echo "删除成功!" || echo "用户不存在,删除失败!"
}
# 查看
seek(){
    echo "查看用户"
    read -p "请输入用户名:" username
    id $username 
}
echo "#############################"
echo "按1  增加用户,并且设置密码"
echo "按2  删除用户"
echo "按3  查看用户"
echo "按4  退出"
echo "#############################"
while :
do
    read -p "请输入你的选择:" options
    case $options in
    1)
        add
        ;;
    2)
        del
        ;;
    3)
        seek
        ;;
    4)
        echo "退出!"
        exit
        ;;
    *)
        echo "请输入指定内容 1-4!"
    esac
done

知识点11 循环获取文件或者命令输出的内容(3种)

示例1:重定向 while read a b c ; < a.txt

#!/bin/bash
while read a b c
do
   echo "name is $a, sex is $b, age is $c "
done < a.txt					# 注:当前路径下的文件。可以接绝对路径

示例2:管道符号 cat a.txt | while read a b c

cat a.txt | while read a b c
do 
    echo "name is $a, sex is $b, age is $c "
done

示例3:for 循环实现(注:使用for循环去做,不太好)

#for循环默认以空白(空格/回车 制表符)分割

echo "for 循环实现..........."
for i in `ls`					# i 代表空白输出的每个文件
do
    echo $i
done

示例3.2:i代表文件的每一项,以空白分割

[root@sanchuang-linux ~]# vim file_test.sh
for i in `cat a.txt`
do
    echo $i
done
[root@sanchuang-linux ~]# bash file_test.sh 
wenyao
f
18
chenpeng
m
19
wtc
f
17
[root@sanchuang-linux ~]# cat a.txt 
wenyao f 18
chenpeng m 19
wtc f 17

示例3.3:for i in ls -al # i代表当前目录下详细信息,i代表以空白分割的每一项

练习12

找出list.xml中主机为ZF的行然后循环输出ip与区服对应的关系

示例

[root@sanchuang-linux ~]# cat list.xml 
####IP    主机名    区服#########
127.0.0.1 ZF-1      1 33 49 57
127.0.0.1 ZF-11     65 67 69
127.0.0.1 HF-1      22 34 6
127.0.0.1 HF-11     6 17 36
127.0.0.1 ZF-12     1 2
127.0.0.1 HF-1      34 7

步骤1:首先过滤出ZF所在的行

[root@sanchuang-linux ~]# vim test6.sh 
#!/bin/bash									# 管道| 把输出 作为下一条命令的输入
cat list.xml |grep ZF |while read ip host qufu		# 首先过滤出ZF所在的行
do											# while read 获取内容
    echo "ip:$ip, qufu:$qufu"					# 注:参数3整个赋给$qufu
done
[root@sanchuang-linux ~]# cat list.xml | grep ZF
127.0.0.1 ZF-1      1 33 49 57
127.0.0.1 ZF-11     65 67 69
127.0.0.1 ZF-12     1 2
[root@sanchuang-linux ~]# sh test6.sh 			# 注:$ip  $host  $qufu  不一定需要对应
ip:127.0.0.1, qufu:1 33 49 57					# 前两个对应的,把前两个都取了
ip:127.0.0.1, qufu:65 67 69						# 后面有的话,就全部是后面的内容
ip:127.0.0.1, qufu:1 2							# 没有的话就为空(取不到的话就为空)

步骤2:套个循环

#!/bin/bash
cat list.xml |grep ZF |while read ip host qufu
do
    for i in $qufu								# 注:套个循环。for循环以空格进行分割
    do
        echo "ip:$ip, qufu:$i"					# 注:这里是i。对区服进行循环
    done
done
[root@sanchuang-linux ~]# sh test6.sh 
ip:127.0.0.1, qufu:1
ip:127.0.0.1, qufu:33
ip:127.0.0.1, qufu:49
ip:127.0.0.1, qufu:57
ip:127.0.0.1, qufu:65
ip:127.0.0.1, qufu:67
ip:127.0.0.1, qufu:69
ip:127.0.0.1, qufu:1
ip:127.0.0.1, qufu:2

总结13 循环获取文件或者命令输出的内容

·for i in 默认 以空白分割 循环获取每个元素
·while read 每次获取整行
while read的参数 可以接任意个,默认还是以空白分割
如果参数没有对应获取的值,那参数就为空
如果文件中空白分割的参数大于read接受的参数,那多出的参数都会赋给最后一个read接受的参数

管道 进制之间通信的一种方式

知识点14 shell中的一维数组

shell中的一维数组 使用
定义:使用圆括号,中间以 空格 作为分隔符
博客连接:https://www.cnblogs.com/tangshengwei/p/5446315.html

示例14.1:定义、索取

[root@sanchuang-linux ~]# a=(xx yy zz)		# 注:a 是一个数组
[root@sanchuang-linux ~]# a=(xx yy zz ff)		# 注:a 是一个数组
[root@sanchuang-linux ~]# echo ${a[0]}		# 注:通过索引查找,下标从0开始
xx
[root@sanchuang-linux ~]# echo ${a[1]}		# 注:通过索引查找
yy
[root@sanchuang-linux ~]# echo ${a[3]}
ff
[root@sanchuang-linux ~]# echo ${a[@]}		# 注:${a[@]} 表示它里面的每一个数,@ 取它里面的全部值
xx yy zz ff								# 注:$@ 参数列表里面的全部内容
[root@sanchuang-linux ~]# echo ${a[@]:1:4}	# 注:索取(切片)
yy zz ff
[root@sanchuang-linux ~]# a=(xx yy zz ff)
[root@sanchuang-linux ~]# echo $a			# 注:echo $a  只取出一位数组里的第一个元素
xx
[root@sanchuang-linux ~]# echo ${a[*]}	# 注:${a[*]} 取出一位数组里面的全部内容,效果一样
xx yy zz ff
[root@sanchuang-linux ~]# echo ${a[@]}		# 注:${a[@]} 取出一位数组里面的全部内容
xx yy zz ff
[root@sanchuang-linux ~]# echo ${a:0:4}		# 注:对字符 xx 进行截取 从0开始
xx
[root@sanchuang-linux ~]# echo ${a:1:4}		# 注:对字符 xx 进行截取 从1开始
x
[root@sanchuang-linux ~]# echo ${a[*]:1:3}	# 注:索取,效果一样(切片)
yy zz ff
[root@sanchuang-linux ~]# a=(1 2 3 4)
[root@sanchuang-linux ~]# echo ${a[*]:1:3}	# 注:索取,闭区间(切片)
2 3 4

获取长度(元素个数)
#注:$# 获取参数列表长度
#echo ${#a[*]}
#echo ${#a[@]}

示例14.2:获取一位数组长度(元素个数)

[root@sanchuang-linux ~]# echo ${#a[*]}		# 注:不能用$a直接获取,因为 $a 代表 里面第一个元素
4
[root@sanchuang-linux ~]# echo ${#a[@]}
4
[root@sanchuang-linux ~]# echo ${#a}			# 注:第一个元素长度
2

示例14.3:获取字符串长度 echo ${#b}

[root@sanchuang-linux ~]# b=abc
[root@sanchuang-linux ~]# echo ${#b}
3

修改/删除 元素(shell里面一维数组的修改/删除)

示例14.4:修改/删除 元素

[root@sanchuang-linux ~]# echo ${a[*]}
xx yy zz ff
[root@sanchuang-linux ~]# a[3]="hh"				# 注:修改元素
[root@sanchuang-linux ~]# echo ${a[*]}
xx yy zz hh									# 注:清空数组 unset a
[root@sanchuang-linux ~]# unset a[3]				# 注:删除指定元素(下标为3)
[root@sanchuang-linux ~]# echo ${a[*]}
xx yy zz
[root@sanchuang-linux ~]# echo ${a[*]}
xx zz
[root@sanchuang-linux ~]# unset a[1]				# 注:删除不了
[root@sanchuang-linux ~]# echo ${a[*]}
xx zz
[root@sanchuang-linux ~]# echo ${!a[*]}			# 注:加! 看元素的下标
0 2				# 注:删除后,不会重新分配下标。一开始每个值的下标都一一对应了,不会改
[root@sanchuang-linux ~]# unset a[2]				# 注:删除zz元素,unset a[2],下标为2
[root@sanchuang-linux ~]# echo ${a[*]}
xx
[root@sanchuang-linux ~]# 

知识点15 linux里 生成随机数

示例

[root@sanchuang-linux ~]# echo $RANDOM 		# 注:自定义的环境变量
15386
[root@sanchuang-linux ~]# echo $RANDOM 
24960

知识点15.2 生成指定范围内的随机数

示例1:产生10以内的随机数(不含10)

[root@sanchuang-linux ~]# echo $(($RANDOM % 10)) 
1
[root@sanchuang-linux ~]# echo $(($RANDOM % 10)) 
8
[root@sanchuang-linux ~]# echo $(($RANDOM % 10)) 
2
[root@sanchuang-linux ~]# echo $(($RANDOM % 10)) 
3

练习16

编写一个随机抽取同学唱歌的程序,如果唱过了,就不能再次被抽到了
1、编写一个文件,里面存放我们歌手的名字 name.txt
2、随机抽取歌手 # 1.循环抽取 2.抽到了就丢掉
#注:使用命令的输出 用``反引号
#注:把读到的人员名单变成一个数组

示例

[root@sanchuang-linux chenpeng]# vim geshou_test.sh
#!/bin/bash
# 将name.txt的内容读取出来					# 注:反引号` ` 把cat命令的输出放到数组里
singers=(`cat name.txt`)					# 注:把读取的内容放到数组里面(cat读取)
echo ${singers[@]}		# 注:验证是否取出数据	# 注:相对路径 指当前下的文件
# 有多少人
total=${#singers[@]}						# 首先 获取人数(对singers长度进行统计)

for i in `seq $total`						# 然后循环(for 循环次数,$total 人数进行循环)
do										# 注:反引号` `  命令去执行它
    read -p "请输入任意键进行抽取"		# 注:read 目的:敲一下键盘  才会接着循环
    # 随机抽取一个人演唱				# 每次循环都是抽取 新的 列表里面的人数(因为下标问题)
    random_num=$(( $RANDOM % ${#singers[*]} ))		#注:生成随机数,范围0 ~ 一维数组长度
    echo "随机数为:$random_num"				# 注:随机抽取索引/下标
    echo "有请${singers[$random_num]}献唱一首!大家热烈欢迎!"
    unset singers[$random_num]				# 注:把选中的人删除(与python不同的是,删除以后下标不变)
    singers=(`echo ${singers[@]}`)			# 注:解决办法 重新赋值,赋值给一个新的一维数组
    echo "未献唱者具体名单为: ${singers[@]}"	# 注:↑也可以使用 singers=(${singers[@]})
done										# 注:↑也可以使用singers= `echo ${singers[@]}`
[root@sanchuang-linux chenpeng]# cat name.txt 	# 注:↑重新赋值后  下标会变 从0~总长度
fengcheng
zhanghuayou
pengyifan
chenpeng
xulilin
tangliangfei
wangtiancheng
lixinhai
liangluyao

演示

[root@sanchuang-linux chenpeng]# sh geshou_test.sh 
fengcheng zhanghuayou pengyifan chenpeng xulilin tangliangfei wangtiancheng lixinhai liangluyao
请输入任意键进行抽取
随机数为:2
有请pengyifan献唱一首!大家热烈欢迎!
未献唱者具体名单为: fengcheng zhanghuayou chenpeng xulilin tangliangfei wangtiancheng lixinhai liangluyao
请输入任意键进行抽取
随机数为:2
有请chenpeng献唱一首!大家热烈欢迎!
未献唱者具体名单为: fengcheng zhanghuayou xulilin tangliangfei wangtiancheng lixinhai liangluyao

#注:获取命令输出的时候 加``反引号

知识点17 产生5–10之间随机数

产生5–10之间随机数

[root@sanchuang-linux chenpeng]# echo $(( $RANDOM % 10 ))		# 注:产生10以内随机数
3
[root@sanchuang-linux chenpeng]# echo $(( $RANDOM % 5 +5 ))		# 注:取5以内的随机数 +5
6
[root@sanchuang-linux chenpeng]# echo $(( $RANDOM % 5 +5 ))
8

50–150之间随机数

[root@sanchuang-linux chenpeng]# echo $(( $RANDOM % 100 +50 ))
79                                                    # 注:100是区间绝对值,50是初始值

150-200之间随机数

#注:150初始值, 50 + 150 末尾值

[root@sanchuang-linux ~]# echo $(( $RANDOM % 50 + 150 ))	# 注:150~200之间
190

知识点18 tr命令(替换命令)

tr命令(主要用来做字符的替换) # 注:对文本处理常用
·字符转换工具
·只能对stdin操作,不能直接对文件操作 # 注:只能对标准输入进行操作

使用tr转换字符
·tr SET1 SET2
·用SET2中的字符替换掉SET1中同一位置的字符
tr -d 删除指定字符
tr -s 压缩相同字符,将连续的指定字符压缩成一个字符

示例1:替换

#注:替换同位置的
[root@sanchuang-linux chenpeng]# echo 123456| tr 345 xyz	# 注:把345替换成xyz
12xyz6	# 注:只能对标准输入进行操作
[root@sanchuang-linux chenpeng]# echo 123456| tr 3 xyz	# 注:把3替换成xyz
12x456	# 注:只替换了x,对应位置的
	# 注:有几个位置,替换几个字符
	# 注:替换同位置的

示例2:删除 # echo 123456| tr -d 34

tr -d 删除指定字符

[root@sanchuang-linux chenpeng]# echo 123456| tr 3 ""	# 注:"" 不能为空,它要替换同位置的
tr: 当不截断设置1 时,字符串2 不能为空
[root@sanchuang-linux chenpeng]# echo 123456| tr -d 34	# 注:删除接tr -d
1256

tr -s 压缩相同字符,将连续的指定字符压缩成一个字符
将连续的指定字符压缩成一个字符

示例3:tr -s 压缩相同字符

[root@sanchuang-linux chenpeng]# echo 111223333444445556666| tr -s 34
11122345556666	# 注:当有连续的时候压缩成一个
[root@sanchuang-linux chenpeng]# echo 11122333344444555666633377744| tr -s 34
1112234555666637774	# 注:并不是去重

练习4:把环境变量里 : 替换成空格

#注:关键点 tr不能替换文件内容

[root@sanchuang-linux chenpeng]# echo $PATH |tr ":" " "	# 注:关键点 tr接收的是标准输入
/lianxi/sc /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /root/bin /usr/local/nginx/sbin /root/bin /usr/local/nginx5/sbin /root/bin

#扩展5:替换文件里的内容,生成一个新文件
#注:把文件导进来 进行标准输入

示例5:将/etc/passwd里的 :替换成空格

写法1:cat导入

[root@sanchuang-linux chenpeng]# cat /etc/passwd |tr ":" " " >/tmp/passwd
[root@sanchuang-linux chenpeng]# less /tmp/passwd 	# 注::全变空格了
写法2:tr接收标准输入  重定向标准输入 tr ":" " " </etc/passwd
[root@sanchuang-linux chenpeng]# tr ":" " " </etc/passwd  >/tmp/passwd2 
[root@sanchuang-linux chenpeng]# less /tmp/passwd2	# 注::全变空格了
#注:写法2把一个文件导进来,进行标准输入    tr ":" " " </etc/passwd

写法2:tr接收标准输入 重定向标准输入 tr “:” " " </etc/passwd

[root@sanchuang-linux chenpeng]# tr ":" " " </etc/passwd  >/tmp/passwd2 
[root@sanchuang-linux chenpeng]# less /tmp/passwd2	# 注::全变空格了
#注:写法2把一个文件导进来,进行标准输入    tr ":" " " </etc/passwd

扩展5.1 重定向标准输入

[root@sanchuang-linux chenpeng]# wc -l /etc/passwd	# 注:wc -l 查看文件行数
52 /etc/passwd
#示例:重定向标准输入
[root@sanchuang-linux chenpeng]# wc -l < /etc/passwd
52
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mycpen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值