linux shell 学习一

1. 终端打印 命令 echo

echo "字符串"

str="hello word"

echo $str 或者 echo ${str}

str="hello world!" 执行报错 -bash: !": event not found 

对于有"!"符号的输出,可以在echo之前,执行 set +H 命令,然后再echo输出.

2.终端打印命令 printf

printf "%-5s %-10s %-4.2f\n" 1 james 90.5789

%s, %c, %d, %f都是格式替代符号.

对于echo或printf中的标志(-e, -n等);

转义换行符

echo -e "1\t2\t3"

打印色彩输出

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

3.环境变量

$PATH, $HOME, $PWD, $USER, $UID, $SHELL等.

4.获得字符串长度

echo ${#变量名}

例如: s="test"

echo ${#s}  返回结果:4

5.识别当前shell版本

echo $0 或者 echo $SHELL

6.算术运算

在Bash shell环境中,可以利用let, (( ))和[ ]执行基本的算数操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.

let n=1+5

echo $n

let n++

let n--

let n+=6

n=$[ 1+5 ]

n=$(( 1+5 ))

n=`expr 3 + 4`

以上不支持浮点数,只用于整数运算.

bc是一个用于数据运算的高级工具,可以借助它执行浮点数运算.

echo "4 * 0.56" | bc

no=58

result=`echo "$no * 1.5" | bc`

echo $result

(1).设定小数精度(参数scale=2将小数位个数设置为2)

echo "scale=2;3/8" | bc

(2).进制转换(参数obase=2,表示几进制,2表示二进制)

no=100

echo "obase=2,$no" | bc

(3).计算平方以及平方根

echo "sqrt(100)" | bc

echo "10^3" | bc

7.文件描述符和重定向

文件描述符是与文件输入,输出相关联的整数,用来跟踪已打开的文件,最常见的文件描述符

0 --- 标准输入(stdin)

1 --- 标准输出(stdout)

2 --- 标准错误(stderr)

(1)用下面的方法可以将输出文件重定向或保存到一个文件中

echo "this is a sample text 1" > temp.txt

echo "this is a samle text 2" >> temp.txt

>和>>不相同, >表示先清空再写入内容; >>表示将内容追加到现有文件的尾部.

重定向操作符操作默认使用标准输出, >等同于1>; >>等同于1>>;

ls +  该命令会报错

ls + 2> out.txt

cmd 2>stderr.txt 1>stdout.txt

cmd &> output.txt

如果你不想让终端中的出错信息,可以将这些错误信息重定向到/dev/null.

这样意味着来自stderr的输出被丢到文件/dev/null中, /dev/null是一个特殊的设备文件,这个文件被接收到任何数据都会被丢弃,因此,null设备通常也被称为位桶或黑洞.

要在终端中打印stdout,同时将它重定向到一个文件中,可以使用tee:

command | tee file1 file2

例如:

echo "test" > atest.txt

cat atest.txt | tee out.txt | cat -n

以上命令表示打印文件atest.txt内容的同时,将该文件的内容的副本存入文件out.txt.

我们可以使用stdin作为命令参数.

cmd1 | cmd2 | cmd3

例如:

echo who is this | tee -

类似的, 使用/dev/stderr代表标准错误, dev/stdout代表标准输出.

将文件重定向到命令 $cmd < file, 可以借助于重定向,像使用stdin那样从文件读取数据.

exec 3< out.txt

cat <&3

exec 5>input.txt

echo newline >&5

cat input.txt

exec 5>>input.txt

echo append line >&5

cat input.txt

8.数组

array_var=(1 2 3 4 5 6) --用空格分隔

另外还可以这样初始化数组, array_var[0]="test1"

打印特定索引的数组元素 echo ${array_var[0]}

如index=5

echo ${array_var[$index]}

以清单形式打印数组中的所有值: echo ${array_var[*]}  或者 echo ${array_var[@]}

打印数组长度: echo ${#array_var[*]} 或者 echo ${#array_var[@]}

9.关联数组

关联数组从Bash4.0开始引入,在关联数组中,我们可以用任意的文本作为数组索引,而普通数组中只能用整数做为索引.

声明关联数组 declare -A ass_array

ass_array=([index1]=val1 [index2]=val2)

declare -A fruits_value

fruits_value=([apple]='100 dollars' [orange]='150 dollars')

echo "apple costs ${fruits_value[apple]}"

apple costs 100 dollars

echo ${!fruits_value[*]}

orange apple

echo ${fruits_value[*]}

150 dollars 100 dollars

10.别名

alias new_command='command sequence'

alias t='ll'

alias命令的作用只是暂时的,一旦关闭当前终端,所有设置过的别名就失效了.为了使别名设置一直保持作用,可以将它放入~/.bashrc文件中.因为每当一个新的shell进程生成时,都会执行~/.bashrc 中的命令.

echo 'alias cmd="command seq"' >> ~/.bashrc

我们可以创建一个别名rm,它能够删除原始文件,同时在backup目录中保留副本.

alias rm='cp $@ ~/backup; rm $@'

11.获取终端信息

tput和stty是两款终端处理工具.

获取终端的行数和列数:

tput cols

tput lines

打印出当前终端名:

tput logname

将光标移动到方位(100,100)处:

tput cup 100 100

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

tput ed

保存当前光标位置,要保存当前的光标位置,请包括 sc 选项或“save cursor position”。:

tput sc

在显示了这些信息之后,光标必须返回到使用 tput sc 保存的原始位置。要使光标返回到其上次保存的位置,请包括rc 选项或“restore cursor position”。

tput rc

用tput清除终端数据:

清除从当前光标位置到行尾的数据,可以使用tput el。要清除从当前光标位置到设备末尾的数据,可以使用tput ed。如果您想要清除整个设备,请使用tput clear

 

 

 

转载于:https://www.cnblogs.com/anny-1980/articles/3017134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值