Shell常用基础

Shell基础

1.echo是用于终端打印的最基本命令,默认情况下,echo在每次调用后添加一个换行符:
a)echo "Welcome to Bash"
——Welcome to Bash

b)echo We
——We

c)echo 'text in quotes'
——text in quotes
如果不使用引号,无法在echo中使用分号,因为分号在Bash shell中用作命令间的分隔符。

2.另一个用于终端打印的命令是printf
a)printf "dd"
printf命令接受引用文本或由空格分隔的参数。我们可以在printf中使用格式化字符串来指定字符串的宽度、左右对齐方式等。默认情况下,printf并不会自动添加换行符,我们必须在需要的时候手动指定

b)%s、%c、%d和%f都是格式替换符,它们定义了该如何打印后续参数。%-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐)。如果不指明-,字符串就采用右对齐形式。宽度指定了保留给某个字符串的字符数量。

c)%-4.2f,其中.2指定保留两位小数

3.用echo -e "包含转义序列的字符串"这种形式

echo -e "1\t2\t3"

——1 2 3

4.打印彩色文本

echo -e "\e[1;31m This is red text \e[0m"

\e[1;31m是一个转义字符串,可以将颜色设为红色,\e[0m将颜色重新置回。只需要将31替换成想要的色彩码就可以了。对于彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47。

5.使用等号操作符为变量赋值:

varName=value

varName是变量名,value是赋给变量的值。如果value不包含任何空白字符,那么就不需要将其放入引号中,否则必须使用单引号或双引号。

var = value不同于var=value。把var=value写成var = value
是一个常见的错误。两边没有空格的等号是赋值操作符,加上空格的等号表示的是等量关系测试。在变量名之前加上美元符号($ )就可以访问变量的内容。

6.获得字符串长度

length=${var}
var=123456789
echo ${#var}

7.let命令可以直接执行基本的算术操作。当使用let时,变量名之前不需要再添加$,例如:

let result=no1+no2 
echo $result

自加操作

let no1++

自减操作

let no1--

简写形式

let no+=6
  1. 操作符[]的使用方法和let命令一样:
result=$[no1+no2]

9.在[] 中也可以使用$前缀,例如:

result=$[$no1+5]

10.expr可用于基本算术操作(需要预算符号之间空格),expr只用于整数运算。

q=$(expr 1 + 1)

11.bc是一个用于数学运算的高级实用工具,可以执行浮点数运算并使用一些高级函数。

a)echo "4 * 0.2" | bc
b)设定小数精度。将参数scale=2将小数位个数设置为2;

echo "scale=2;22/7" | bc

c)用bc将一种进制系统转换为另一种。

no=2
echo "obase=2;$no" | bc

——10

no=1100100 
echo "obase=10;ibase=2;$no" | bc 

——100
d)计算平方以及平方根

echo "sqrt(100)" | bc 
echo "10^10" | bc

12.使用大于号将文本保存到文件中

echo "This is a sample" > 1.txt

该命令会将输出的文本保存在1.txt中。如果1.txt已经存在,大于号会清空该文件中先前的内容。

13.使用双大于号将文本追加到文件中:

echo "This is a " >> 1.txt

14.使用2>将stderr重定向到2.txt

ls + 2>2.txt

15.能够将stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中:

cmd 2>&1 q.txt

或者cmd &> w.txt
16.tee命令既可以将数据重定向到文件,还可以提供一份重定向数据的副本作为管道中后续命令的stdin。
在这里插入图片描述
cat: a1: Permission denied 并没有在文件内容中出现,因为这些信息被发送到了stderr,而tee只能从stdin中读取。
默认情况下,tee命令会将文件覆盖,但它提供了一个-a选项,可用于追加内容。
要发送输入内容的两份副本给stdout,使用-作为命令的文件名参数即可:

echo who is this | tee -

17.重定向操作符(>和>>)可以将输出发送到文件中,而不是终端。>和>>略有差异。尽管两者都可以将文本重定向到文件,但是前者会先清空文件,然后再写入内容,而后者会将内容追加到现有文件的尾部。默认情况下,重定向操作针对的是标准输出。如果想使用特定的文件描述符,你必须将描述符编号置于操作符之前。

18.将文件重定向到命令,借助小于号(<)
19.cat<<EOF>log.txt
This is a generated file. Do not edit. Changes will be overwritten.
EOF
出现在cat <log.txt与下一个EOF行之间的所有文本行都会被当作stdin数据。log.txt文件的内容显示如下:

cat log.txt 

20.exec命令创建全新的文件描述符。常见的打开模式:
只读模式;
追加写入模式;
截断写入模式;

21.数组,可以在单行中使用数值列表来定义一个数组:

array_var=(test1 test2 test3 test4) 

这些值将会存储在以0为起始索引的连续位置上另外,还可以将数组定义成一组“索引值”:

array_var[0]="test1" 
array_var[1]="test2" 
array_var[2]="test3" 
array_var[3]="test4" 
array_var[4]="test5" 
array_var[5]="test6"

a)打印出特定索引的数组元素内容:

echo ${array_var[0]} 

——test1

b)以列表形式打印出数组中的所有值:

 echo ${array_var[*]} 

——test1 test2 test3 test4 test5 test6

 echo ${array_var[@]} 

——test1 test2 test3 test4 test5 test6

c)打印数组长度

echo ${#array_var[*]}

——6

22.定义关联数组,在关联数组中,我们可以用任意的文本作为数组索引。首先,需要使用声明语句将一个变量定义为关联数组:

declare -A array

使用行内“索引-值”列表:

array=([ss]=1 [dd]=3)

显示数组内容:

echo "ss constd ${array[ss]}"

列出数组索引

echo ${!array[*]}

或者echo ${!array[@]}

23.获取终端的行数和列数:

tput cols 
tput lines

24.将光标移动到坐标(100,100)处:

tput cup 100 100

25.设置终端背景色:

tput setb n

n可以在0到7之间取值。

26.设置终端前景色:

tput setf n

27.设置文本样式为粗体:

tput bold

28.设置下划线的起止:

tput smul 
tput rmul

29.删除从当前光标位置到行尾的所有内容:

tput ed

30.读取日期:

date

31.打印纪元时:

date +%s

32.–date指定了作为输入的日期。我们可以使用任意的日期格式化选项来打印输出。data命令可以根据指定的日期找出这一天是星期几:

date --date "Jan 20 2001" +%A

33.用带有前缀+的格式化字符串作为date命令的参数,可以按照你的选择打印出相应格式的日期。

34.用带有前缀+的格式化字符串作为date命令的参数,可以按照你的选择打印出相应格式的日期。

date "+%d %B %Y"

35.函数的定义包括function命令、函数名、开/闭括号以及包含在一对花括号中的函数体。

function fname(){
		statements;
}

或者:

	fname(){
		statements;
}

只需使用函数名就可以调用函数:
fname;

36.多个命令组合,这些命令被称为过滤器,我们使用管道连接每一个过滤器,管道操作符是|。

ls | cat -n > out.txt

ls的输出被传给cat -n,后者为通过stdin所接收到的输入美容加上行号,然后将输出重定向到文件out.txt
37.需要迭代一个字符串或逗号分隔型数值,如果是前者可以用IFS=” ”;后者使用IFS=”,”.

38.echo {1,50}; #生成一个从1~50的数字序列

39.echo {a..z} {A..Z}; #生成大小写字母序列

40.util循环,直到给定的条件为真,否则一直循环。

41.比较条件通常被放置在封闭的中括号中,一定要注意在[或]与操作数之间有一个空格。

[$var -eq 0 ] or [ $var -eq 0]

-a是逻辑与操作符,-o是逻辑或操作符。可以按照下面的方法结合多个条件进行测试:

[ $var1 -ne 0 -a $var2 -gt 2 ] #使用逻辑与-a 
[ $var1 -ne 0 -o $var2 -gt 2 ] #逻辑或-o
文件系统相关测试符号含义
[x $var ]:如果给定的变量包含的文件可执行,则返回真。
[f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
[d $var ]:如果给定的变量包含的是目录,则返回真。
[e $var ] ]:如果给定的变量包含的文件存在,则返回真。
[c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真。
[b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真。
[w $var ]:如果给定的变量包含的文件可写,则返回真。
[r $var ]:如果给定的变量包含的文件可读,则返回真。
[L $var ]:如果给定的变量包含的是一个符号链接,则返回真。

43.字符串比较,进行字符串比较时,最好用双中括号。在**“[”和“]”**与操作数之间有一个空格。

44.-z,判断为空串,返回真

-n,不为空串,返回真

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值