Linux命令学习20171013

来源:互联网 发布:淘宝怀轩旗舰店真假 编辑:程序博客网 时间:2024/04/28 06:12

1.shell中变量的赋值和引用

变量名规则:

(1)首个字符必须是字母(a-z,A-Z)

(2)中间不能有空格,可以有_

(3)不能使用标点符号

(4)不能使用关键字(可以使用help命令查看保留关键字)

变量使用:

(1)变量名=值

(2)取一个变量值,只需要在变量前加$

 

脚本1.sh

#!/bin/ksh

#变量赋值

a="dingguanyi"

#打印a的值

echo"a is:" $a

 

赋权:chmod +x 1.sh

执行脚本:./1sh

a is:dingguanyi

 

有时候变量可能和其他字符混淆,我们${变量名}来取值变量,如下例,$numnd会去搜索变量numnd,而我们没有定义变量numnd,打印为空

 

脚本2.sh

#/bin/ksh

num=2

echo "this is the $numnd"

echo "this is the ${num}nd"

 

赋权:chmod +x 2.sh

执行脚本:./2.sh

this is the

this is the 2nd

 

 

2.常用命令

(1)wc -l filewc -w file wc -c file

分别计算文件的行数(line)单词数(word)字符数(character)

 

(2)cut -bcolumn file

cut -b 1-2 file输出文件每行1-2字符的内容

 

(3)read var

提示用户输入,并将输入内容赋值给var

 

(4)sort file

对文件所有行进行排序,并打印

 

(5)uniq

输入文件中内容不一致的行,去重,例如:sort file | uniq

 

(6)basenamedirname

返回不包含路径的文件名:basename /dingguanyi/1.sh 返回1.sh

返回文件所在路径:dirname /dingguanyi/1.sh 返回/dingguanyi

 

(7)head/tailfile

打印文件开头几行:head -1 1.sh > 3.sh

打印文件末尾几行:tail -1 1.sh > 4.sh

 

(8)sed查找替换

将文件1.txt中的D全部替换为A并输出到文件2.txt:cat 1.txt | sed 's/D/A/g' > 2.txt

 

(9)awk文本处理

取最近5次登录系统的用户:last -n 5

取最近5次登录的用户和登录的ip以#分割:last -n 5|awk -F ' ' '{print$1"#"$3}'

 

(10)管道:|将一个命令的输出作为另外一个命令的输入

计算文件中包含A的行数:grep "A" 1.del|wc -l

 

(11)重定向>写入文件并覆盖旧文件,>>追加写入文件

 

(12)文件压缩解压:压缩是将一个大的文件通过压缩算法变成个小文件

压缩:gzip 1.del

解压:gzip -d 1.del.gz/gunzip 1.del.gz

压缩:bzip2 1.del

解压:bzip2 -d 1.del.bz2/bunzip2 1.del.bz2

 

(13)文件归档:归档打包则是将一大堆文件或者目录变成一个总的文件

归档:tar -cvf 1.tar 1.del 2.del

解归档:tar -xvf 1.tar

 

(14)反短斜线可以将一个命令的输出作为其他命令的命令参数:`

将文件夹下过去24小时内修改过的文件打包:tar -cvf cs.tar `find ./ -mtime -1 -type f`

 

 

3.shell中的流程控制

(1)if语句

If ...;

then ...

else ...

fi

 

脚本3.sh

#!/bin/ksh

if [ "$SHELL" = "/usr/bin/bash"];

then echo "you login shell isbash"

else echo "you login shell is not bashbut $SHELL"

fi

 

关系或与

目录下有1.del则打印:[ -f "./1.del" ]&& echo "this is 1.del"

 

(2)case语句

case可以用来匹配一个给定的字符串,而不是数字

case...in...)

do something here;;

esac

 

脚本4.sh

运行脚本,解压文件 ./4.sh 1del.gz

#!/bin/ksh

ftype=`file "$1"`

case "$ftype" in

"$1: tar archive"*) tar -xvf"$1";;

"$1: gzip (.gz) compresseddata"*) gunzip "$1";;

"$1: data or International Languagetext"*) bunzip2 "$1";;

*) echo "File $1 can not beuncompressed with smartzip";;

esac

 

(3)select语句

适用于交互场景,用户可以从一组不同的值中进行选择

脚本5.sh

#!/bin/ksh

echo "What is your favourite OS?"

select var in "Red Hat""CentOS" "Ubuntu" "Fedora" "Other";do

break

done

echo "You have selected $var"

 

(4)while/for循环语句

 

脚本6.sh

#!/bin/ksh

for var in A B C;

do echo "var is $var"

done

 

 

4.shell中的特殊符号

(1)引号

作用:防止通配符和变量的拓展。所谓的拓展就是指程序会把通配符(比如*)替换成适当的文件名,把变量替换成变量值。

touch 1.jpg 2.jpg

echo *.jpg

以上语句输出:1.jpg 2.jpg(其中*拓展为任意多个字符变为1和2了)

 

引号(单引号和双引号)可以防止通配符*的拓展:

echo "*.jpg"

echo '*.jpg'

运行结果为:

*.jpg

*.jpg

 

其中单引号更严格,可以防止变量拓展;而双引号可以防止通配符拓展但允许变量拓展:

echo $SHELL

echo "$SHELL"

echo '$SHELL'

运行结果为:

/usr/bin/ksh

/usr/bin/ksh

$SHELL

 

还有一种防止拓展的方法,即使用转义字符:反斜杠\

echo \*.jpg

echo \$SHELL

运行结构:

*.jpg

$SHELL

 

(2)Heredocument

用法:将两个delimiter之间的内容(here document connect)传递给cmd作为输入参数

注意:A.delimiter只是个标识而已,可以替换成任意合法字符 B.作为结尾的delimiter一定要顶格写,前后不能有任何字符和空格

cmd << delimiter

here documentconnect

delimiter

 

脚本7.sh

#!/bin/ksh

cat << help

EXAMPLE:mv file1 file2

help

原创粉丝点击