下班前的Linux Shell常用技巧总结(十一)

在这里插入图片描述

  1. 用set命令设置bash的选项:下面为set主要选项的列表及其表述:选项名开关缩写描述allexport-a打开此开关,所有变量都自动输出给子Shell。noclobber-C防止重定向时文件被覆盖。noglob-d在路径和文件名中,关闭通配符。

#打开该选项/> set -o allexport #等同于set -a#关闭该选项/> set +o allexport #等同于set +a#列出当前所有选项的当前值。

/> set -o

allexport off

braceexpand on

emacs on

errexit off

errtrace off

functrace off

hashall on

histexpand on

… …/> set -o noclobber #打开noclobber选项,防止在重定向时原有文件被覆盖。/> date > outfile #通过date命令先生成一个文件outfile。/> ls > outfile #将ls命令的输出重定向到该文件outfile,shell将提示不能覆盖已经存在的文件。

-bash: outfile: cannot overwrite existing file/> set +o noclobber #关闭noclobber选项。/> ls > outfile #重新将ls的输出重定向到outfile,成功。2. 变量:设置局部变量:/> name=“stephen liu” #注意等号两边不要有空格,如果变量值之间存在空格,则需要用双引号括起/> echo $namestephen liu/> name= #将变量设置为空时,等号后面也不要有空格,直接回车即可。/> echo $name #name变量为空,因此echo不会有任何输出。

注意:以上变量的声明方式均可替换为declare variable=value的形式。/> declare name=“stephen liu”/> readonly name #将name变量设置为只读。/> echo $namestephen liu/> name=“my wife” #如果针对只读变量重新赋值,将报错,提示name是只读变量。

-bash: name: readonly variable/> unset name #如果unset只读变量,将同样报错,提示不能unset只读变量。

-bash: unset: name: cannot unset: readonly variable设置全局/环境变量:在当前Shell中创建的全局/环境变量可以直接传递给它所有的子Shell,当前创建环境变量的Shell被称为夫Shell。/> export allname=john #利用export命令,将其后声明的变量置为环境变量/> bash #启动一个新的子Shell/> echo KaTeX parse error: Expected 'EOF', got '#' at position 9: allname #̲在子Shell中echo变量allname,发现夫Shell中设置的值被传递到子Shell

john/> declare -x allname2=peter #这里的功能和结果都是和上面的命令相同,只是利用declare -x命令设置环境变量

/> bash/> echo $allname2peter

下面的列表将给出常用的内置Shell环境变量:变量名含义BASH表示bash命令的完整路径名。ENV在启动新bash shell时执行的环境文件名。HOME主目录。LANG本地化语言。PATH命令搜索路径,彼此之间冒号分隔。PPID父进程PID。PWD当前工作目录,用cd命令设置。3. echo命令:该命令主要用于将其参数打印到标准输出。其中-e选项使得echo命令可以无限制地使用转义序列控制输出的效果。下面的列表给出常用的转义序列。转义序列功能\c不换行打印\n换行\t制表符\反斜杠

echo还提供了一个常用的-n选项,其功能不输出换行符。/> echo The username is $LOGNAMEThe username is stephen

#下面命令的输出中的“/>”表示命令行提示符。/> echo -e "\tHello World\c"Hello World />/> echo -n "Hello World"Hello World />4. printf命令:该命令和C语言中的printf函数的功能相同,都用用来格式化输出的。格式包括字符串本身和描述打印效果的字符。定义格式的方法和C语言也是完全一样的,即在%后面跟一个说明符,如%f表示后面是一个浮点数,%d表示一个整数。printf命令也同样支持转义序列符,其常用转义序列如下:转义序列功能\c不换行打印\n换行\t制表符\反斜杠"双引号

其常用的格式化说明符列表如下:说明符描述%cASCII字符%d,%i十进制整数%f浮点格式%o不带正负号的八进制值%s字符串%u不带正负号的十进制值%x不带正负号的十六进制值,其中使用a-f表示10-15%X不带正负号的十六进制值,其中使用A-F表示10-15%%表示%本身

下面是printf的一些常用使用方式:/> printf “The number is %.2f.\n” 100 这里.2f表示保留小数点后两位

The number is 100.00.

#%-20s表示一个左对齐、宽度为20个字符字符串格式,不足20个字符,右侧补充相应数量的空格符。

#%-15s表示一个左对齐、宽度为15个字符字符串格式。

#%10.2f表示右对齐、10个字符长度的浮点数,其中一个是小数点,小数点后面保留两位。/> printf “%-20s%-15s%10.2f\n” “Stephen” “Liu” 35Stephen Liu 35.00

#%10s表示右对齐、宽度为10的字符串,如不足10个字符,左侧补充相应数量的空格符。/> printf “|%10s|\n” hello| hello|

在printf中还有一些常用的标志符,如上面例子中的符号(-),这里我们在介绍一个比较常用的标识符"#"

#如果#标志和%x/%X搭配使用,在输出十六进制数字时,前面会加0x/0X前缀。/> printf “%x %#x\n” 15 15f 0xf5. 变量替换运算符:bash中提供了一组可以同时检验和修改变量的特定修改符。这些修改符提供了一个快捷的方法来检验变量是不是被设置过,并把输出结果输出到一个变量中,见下表:修改符描述用途 v a r i a b l e : − w o r d 如 v a r i a b l e 被 设 置 且 非 空 , 则 返 回 该 值 , 否 则 返 回 w o r d , 变 量 值 不 变 。 如 变 量 未 定 义 , 返 回 默 认 值 。 {variable:-word}如variable被设置且非空,则返回该值,否则返回word,变量值不变。如变量未定义,返回默认值。 variable:wordvariableword{variable-word}如variable未被设置,则返回word,变量值不变,如果设置变量,则返回变量值,即使变量的值为空值。如变量未设置,返回默认值。 v a r i a b l e : = w o r d 如 v a r i a b l e 被 设 置 且 非 空 , 则 返 回 该 值 , 否 则 设 置 变 量 为 w o r d , 同 时 返 回 w o r d 。 如 果 变 量 未 定 义 , 则 设 置 其 为 默 认 值 。 {variable:=word}如variable被设置且非空,则返回该值,否则设置变量为word,同时返回word。如果变量未定义,则设置其为默认值。 variable:=wordvariableword

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值