【linux私房菜】【10】【认识与学习BASH】

本文详细介绍了Linux中的命令行技巧,如使用分隔符处理PATH变量、两行输出长命令、变量的设置和取消、echo命令的用法、子进程环境变量继承、read命令获取用户输入、以及grep和cut工具的使用。
摘要由CSDN通过智能技术生成

如果命令串太长,如何使用两行来输出?

cp /var/spool/mail/root/ /etc/crontab \
/etc/fstab /root

上面的这个命令用途是将三个文件复制到/root这个目录下。【enter】键是紧接着反斜杠的。

echo的使用:

echo $variable
echo ${PATH}

在bash当中,当一个变量名称尚未被设置时,默认的内容是【空】

变量的设置规则

  • 变量与变量内容以一个等号【=】来连接
  • 等号两边不能直接接空格
  • 变量名称只能是英文字母和数字,但是开头字符不能是数字
  • 双引号内的特殊字符如$等,可以保有原本的特性
  • 单引号内的特殊字符则仅为一般字符(纯文本)
  • 可用转义符【\】将特殊符号(如【enter】【$】【\】【空格】【‘】)变成一般字符
  • 在一串命令的执行中,还需要借由其他额外的命令所提供的信息时,可以使用反单引号或$命令
  • 若该变量为扩增变量内容时,则可用“$变量名称”或${变量}累加内容
    PATH="$PATH":/home/bin
    PATH=${PATH}:/home/bin
  • 若该变量需要再其他子程序执行,则需要以export来使变量变成环境变量。 
  • 取消变量的方法为使用unset
    #12name=VBird #fail
    #name = Vbird #fail
    name=Vbird #ok
    #name=Vbird's name #fail 
    name="Vbird's name" #ok
    #name='vbird's name' #fail
    name=Vbird\'s\ name #ok
    

如何进入目前内核的模块目录

cd /lib/modules/`uname -r`/kernel
cd /lib/modules/$(uname -r)/kernel

 env命令:观察环境变量

echo $$                 shell的PID;

?:                           关于上个执行命令的返回值

子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量。如你想要让该变量内容继续的在子进程中使用,那么就请执行:export 变量名称

read [-pt] variable    要读取来自键盘输入的变量

-p: 后面可以接提示字符

-t: 后面可以接等待的秒数

book@100ask:~$ read atest
nihao
book@100ask:~$ echo $atest
nihao
book@100ask:~$ read -p "please keyin your name:" -t 10 named
please keyin your name:shenzhong
book@100ask:~$ echo $named
shenzhong
book@100ask:~$
book@100ask:~$ path=${PATH}
book@100ask:~$ echo ${path}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
book@100ask:~$
book@100ask:~$ echo ${path#/*/local/sbin:}
/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
book@100ask:~$
book@100ask:~$ echo ${path##/*:}
/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
book@100ask:~$
book@100ask:~$ echo ${path%/*/bin}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain
book@100ask:~$ echo ${path%:*/bin}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
book@100ask:~$
book@100ask:~$ echo ${path%%:*/bin}
/usr/local/sbin
book@100ask:~$
book@100ask:~$ echo ${path/sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
book@100ask:~$ echo ${path//sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
book@100ask:~$

 ${变量#关键词}           若变量内容从头开始的数据符合【关键词】,则将符合的最短数据删除

 ${变量##关键词}         若变量内容从头开始的数据符合【关键词】,则将符合的最短数据删除

 ${变量%关键词}          若变量内容从尾向前的数据符合【关键词】,则将符合的最短数据删除

 ${变量%关键词}          若变量内容从尾向前的数据符合【关键词】,则将符合的最短数据删除

 ${变量/旧字串/新字符串}         若变量内容符合旧字符串,则第一个旧字符串会被新字符串替换

 ${变量//旧字串/新字符串}        若变量内容符合旧字符串,则所有的旧字符串会被新字符串替换

通配符

*        代表0到无穷多个任意字符

?        代表一定有一个任意字符

【】        同样代表一定有一个在括号内的字符(非任意字符)

【-】        若有减号在中括号内时,代表在编码顺序内的所有字符

【^】        若中括号内的第一个字符为指数符号(^),那表示反向选择。

1>         以覆盖的方法将正确的数据输出到指定的文件或设备上;

1>>         以累加的方法将正确的数据输出到指定的文件或设备上;

2>         以覆盖的方法将错误的数据输出到指定的文件或设备上;

2>>         以累加的方法将错误的数据输出到指定的文件或设备上;

2>&1       文件描述符 1 是标准输出 (stdout)。 文件描述符 2 是标准错误 (stderr)。起初,2>1 可能看起来像是将 stderr 重定向到 stdout 的好方法。但是,它实际上会被解释为“将 stderr 重定向到名为 1 的文件”。& 表示后面和前面的是文件描述符,而不是文件名。因此,我们使用2>&1。将 >& 视为重定向合并运算符。

管道命令仅会处理标准输出,对于标准错误会予以忽略;

管道命令必须要能够接受来自前一个命令的数据成为标准输入继续处理才行。

cut        主要用途在于同一行里面的数据进行分解,最长使用在分析一些数据或文字数据的时候。这是因为有时候我们会以某些字符当做划分的参数,然后来将数据加以分割,已取得我们所需要的数据。

-d :        后面接分割字符,与-f 一起使用

-f :        根据-d的分隔字符将一段信息划分为数段,用-f取出第几段的意思

-c:        以字符(characters)的单位取出固定字符区间

book@100ask:~$ echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
book@100ask:~$ echo ${PATH} | cut -d ':' -f 3
/usr/sbin
book@100ask:~$
book@100ask:~$ echo ${PATH} | cut -d ':' -f 3,4
/usr/sbin:/usr/bin
book@100ask:~$
book@100ask:~$ echo ${PATH} | cut -c 12
s
book@100ask:~$ echo ${PATH} | cut -c 12-
sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/book/Desktop/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

grep        分析一行信息,若当中有我们所需要的信息,就将该行拿出来

grep 【-acinv】【--color=auto】 '查找字符' filename

-a:        将二进制文件以文本文件的方式查找数据

-c:        计算找到‘查找字符’的次数

-i:        忽略大小写的不同,所以大小写视为相同

-n:        顺便输出行号

-v:        反向选择,显示出没有'查找字符’的那一行

未完继续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值