linux shell 入门学习笔记10内置shell命令
创始人
2024-05-26 20:37:37
0

bash基础的内置命令

  • echo
  • eval
  • exec
  • export
  • read
  • shift

echo命令
-n 不换行输出
-e 解析字符串中的特殊符号\n 换行
\r 回车
\t 制表符 四个空格
\b 退格

-n参数演示

xiao123@xiao123:~/Downloads$ echo 你真胖;echo 你还挺可爱;
你真胖
你还挺可爱
xiao123@xiao123:~/Downloads$ echo -n 你真胖;echo 你还挺可爱;
你真胖你还挺可爱
xiao123@xiao123:~/Downloads$ echo -n 你真胖;echo -n 你还挺可爱;
你真胖你还挺可爱xiao123@xiao123:~/Downloads$

-e参数演示

xiao123@xiao123:~/Downloads$ echo "我看你挺\n好的"
我看你挺\n好的
xiao123@xiao123:~/Downloads$ echo -e "我看你挺\n好的"
我看你挺
好的
xiao123@xiao123:~/Downloads$ printf "我看你挺\n好的"
我看你挺
好的xiao123@xiao123:~/Downloads$ printf "我看你挺\n好的\n"
我看你挺
好的
xiao123@xiao123:~/Downloads$
eval命令

执行多个命令

xiao123@xiao123:~/Downloads$ eval ls;cd /tmp
different.sh  make_vars.sh  nohup.out  special_test.sh  t1.sh  test.sh
xiao123@xiao123:/tmp$
exec命令

不创建子进程,执行后续命令,且执行完毕后,自动exit。

xiao123@xiao123:~/Downloads$ su - root
Password:
root@xiao123:~# exec date
2023年 02月 25日 星期六 10:45:02 CST
xiao123@xiao123:~/Downloads$
export命令

查找和设置环境变量的值

read 命令

用于接收标准输入或者其他文件描述符的输入,并且可以和用户进行交互。如果没有指定变量名,读取的数据将被自动赋值给特定的变量$REPLY。read每次调用读取一行。

-a	指定变量为数组
-r	反斜杠转义不会生效,意味着行末的’\’成为有效的字符,例如使 \n 成为有效字符而不是换行
-p	指定输出提示信息
-d	输入结束符,当输入的内容出现这个字符时,立即结束。一般情况下是以IFS为参数的间隔,但是通过-d自定义
-n	指定输入的字符长度
-t	指定读取值时等待的时间(秒),read命令会一直等待用户输入,时间到自动退出
-s	不显示输入的值,一般用于密码
IFS (Internal Field Separator)输入字段分隔符,Bash 会根据 IFS 中定义的字符来进行字符串拆分。

无选项单参数
不带参数,输入值都用空格隔开

xiao123@xiao123:~/Downloads$ read ARGS
11 22 33
xiao123@xiao123:~/Downloads$ echo ${ARGS}
11 22 33
xiao123@xiao123:~/Downloads$

无选项多参数
定义多个变量,变量和输入值都用空格隔开。

xiao123@xiao123:~/Downloads$ read ARG1 ARG2
11 22 33 44
xiao123@xiao123:~/Downloads$ echo ${ARG1} ${ARG2}
11 22 33 44
xiao123@xiao123:~/Downloads$ echo ${ARG1}
11
xiao123@xiao123:~/Downloads$ echo ${ARG2}
22 33 44
xiao123@xiao123:~/Downloads$

-a展示
将接收到的数据看作一个数组。使用IFS定义的分割符分割。

xiao123@xiao123:~/Downloads$ read -a ARGS
11 22 33 44 55
xiao123@xiao123:~/Downloads$ echo ${ARGS[*]}
11 22 33 44 55
xiao123@xiao123:~/Downloads$ echo ${ARGS[1]} ${ARGS[2]}
22 33
xiao123@xiao123:~/Downloads$

-r展示
字符串原样输出,不转义特殊字符。

xiao123@xiao123:~/Downloads$ read -r ARGS
\b\narg
xiao123@xiao123:~/Downloads$ echo ${ARGS}
\b\narg
xiao123@xiao123:~/Downloads$

-d展示
指定read命令的结束符。

xiao123@xiao123:~/Downloads$ read -d "-" ARG
arg1
arg2
arg3
-xiao123@xiao123:~/Downloads$ echo ${ARG}
arg1 arg2 arg3
xiao123@xiao123:~/Downloads$

-p展示
指定输出提示信息。

xiao123@xiao123:~/Downloads$ read -p "请输入一个字符:" ARG
请输入一个字符:a
xiao123@xiao123:~/Downloads$ echo ${ARG}
a
xiao123@xiao123:~/Downloads$

-t展示
指定输入的超时时间。单位:s

xiao123@xiao123:~/Downloads$ read -t 3 ARG
xiao123@xiao123:~/Downloads$

-s展示
不显示输入的字符。

xiao123@xiao123:~/Downloads$ read -s ARG
xiao123@xiao123:~/Downloads$ echo ${ARG}
1234567890
xiao123@xiao123:~/Downloads$

IFS展示

xiao123@xiao123:~/Downloads$ IFS='|'
xiao123@xiao123:~/Downloads$ read ARG1 ARG2 ARG3
1|2|3
xiao123@xiao123:~/Downloads$ echo ${ARG1}
1
xiao123@xiao123:~/Downloads$ echo ${ARG2}
2
xiao123@xiao123:~/Downloads$ echo ${ARG3}
3
xiao123@xiao123:~/Downloads$

IFS文件实验展示

xiao123@xiao123:~/Downloads$ cat ./file.csvcyberciti.biz|202.54.1.1|/home/httpd|ftpcbzuser
nixcraft.com|202.54.1.2|/home/httpd|ftpnixuser
xiao123@xiao123:~/Downloads$ cat ./ifstest.sh
file=./file.csvIFS='|'
printf "domain\t\tip\t\twebroot\t\tusername\n"
while read -r domain ip webroot username;
doprintf "%s\t%s\t%s\t%s\n" ${domain} ${ip} ${webroot} ${username}
done < "${file}"
xiao123@xiao123:~/Downloads$ bash ./ifstest.sh
domain          ip              webroot         usernamecyberciti.biz   202.54.1.1      /home/httpd     ftpcbzuser
nixcraft.com    202.54.1.2      /home/httpd     ftpnixuser
xiao123@xiao123:~/Downloads$
shift命令

移动命令行参数,默认命令shift=shift 1
shift例子1

xiao123@xiao123:~/Downloads$ cat shift.sh
echo ">>没有使用shift"
echo "输入的参数数量: $#"
echo '$1 $2 $3是:' $1, $2, $3
shift 2
echo ">>使用了shift2之后"
echo "剩余输入的参数数量:$#"
echo '$1 $2 $3是:' $1, $2, $3
xiao123@xiao123:~/Downloads$ bash ./shift.sh 11 22 33
>>没有使用shift
输入的参数数量: 3
$1 $2 $3是: 11, 22, 33
>>使用了shift2之后
剩余输入的参数数量:1
$1 $2 $3是: 33, ,
xiao123@xiao123:~/Downloads$

shift例子2

xiao123@xiao123:~/Downloads$ cat ./shift2.sh
until [ -z "$1" ]
doecho "$@"shift
done
xiao123@xiao123:~/Downloads$ bash ./shift2.sh 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9
4 5 6 7 8 9
5 6 7 8 9
6 7 8 9
7 8 9
8 9
9
xiao123@xiao123:~/Downloads$

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...