Linux基础语法,Shell基础脚本

Linux基础语法:

1. /   :绝对路径:/home/anaconda3

      相对路径:anaconda3

      用户home: ~

2. pwd :输出当前工作目录的全名

3. ls :列出目录内容

ls -l :长清单格式

ls -a :所有条目

ls -d :列表目录

ls -R :列出子目录

ls -1 :一行显示一个名字

ls -F :有分类的目录,名字后面加字符(*【可执行的文件】、/【路径】、@【链接】、|【两个进程要用这个链接】、=【网络连接socket】)

4. gedit :编辑文本文件

5. echo :查找环境变量

echo $PATH 环境变量(里面全是路径,分号是分隔符,Windows和Linux都是path作为环境变量)

6. printenv :打印出所有的环境变量(都是XXX=xxx的格式)

7. grep :帮助查找(printenv | grep PATH 把前面的的输出作为后面的输入)

grep -i :不区分大小写的搜索

grep -w :只匹配完整的单词

grep -l :只显示匹配的文件名

grep -r :在当前目录和所有子目录中搜索

grep -n :用行号列出匹配的行

grep -v :反操作,显示不匹配的项目

grep --color :显示匹配的颜色

grep --include :通过名字类型查找文件

举例子:

printenv | grep path :查找名字是path的环境变量

printenv | grep -i path :不区分大小写的查找名字是path的环境变量

grep -ir python . :从当前路径开始找所有包含python的文件;r是一直找下去;.是很特殊的路径指当前路径;..是指父亲的路径;要是想查找一段文字要用引号引起来 ”python path name”

grep -ir python file1 :在file1中找到python文件

grep -ir “python$” . :从当前路径查找以python结尾的

grep -ir --include *.py math ~ :--include *.py表示只看.py结尾的文件,其他不看;math是要找的东西;~是从home里面找

8. man :说明书菜单,可以解释命令的用法

9. env :也是查询(env | less :只显示一页可以用键盘的上一页下一页来控制页面的显示;env | more和less功能一样,但是less更强大,因为more要把所有的文件都缓存到内存里才开始显示,而less是有多少先显示多少)

10. | :是管道的意思,把前面的输出作为后面的输入,可以接很多个

11. clear :把屏幕清掉

12. file :鉴定文件类型,是个链接,连接到另外一个地方去,看文件里面是什么

13. wc :统计命令

wc -w :统计有多少字

wc -I :统计有多少行

wc -L :统计最长的一行有多长

ls –1F | grep “*” | wc –I*是特殊字符,所以使用时候要加””

【很常用,统计有多少条命令】

ls –1F | grep “@” | wc –I*是特殊字符,所以使用时候要加””

【很常用,统计有多少条链接】

14. head : 列举文件的头几行,查看文件时会用到

head -5 zipfile.py:显示开始的几行

15. tail :显示尾巴上的几行

tail -f file:实时跟踪文件的最后几行

16. mkdir :创建目录路径;要创造一整套的路径

mkdir –p ~/tmp3/abc/xyz不用分别创建,直接输命令就可以

17. tree ;可以吧当前路径写成树的形式

18. cp :复制文件或者路径

cp ~/anaconda3/lib/python3.6/zip* .   复制该文件到当前文件夹下

cp f1 f2    复制f1到f2中

cp –r d1 d2  把d1和它的子文件都复制到d2中

19. cat :把几个文件合并为同一个文件生成一个新的

cat zip* > my.py  把cat和zip合起来公洞放到my.py中去

cat –n my.py  显示一个文件,把行号也显示出来

20. 标准输入stdin标识为0输出,输出要输出两个,一个是正常输出stdout标识为1,一个输出错误信息stderr标识为2

<   重定向进命令

>   重定向输出到文件中去,并且重写

>>  重定向输出到文件中去,但是不重写,附加

2>  重定向输出到文件中去,输出的是错误的,并且重写

2>>重定向输出到文件中去,输出的是错误的,但是不重写

ls ~ /Toronto > ~/out.txt 2> ~/err.txt

生成两个新的文件,错误信息输到err.txt,正确信息输到out.txt

21. hexdump :把文件原始的数字显示出来,十六进制

hexdump -C my.py  按字符把所有的数字输出出来

22. which :给出命令的原始路径

23. ln :软链接连接到文件,可以直接到那个位置

24. sudo :升级成超级root用户

sudo ls -alR /root

显示root下的所有文件,并且包含所有子路径

25. tar :打包和解压

tar czvf demo.tar.gz *  把当前路径下所有东西打包放到demo.tar.gz中

tar xzvf demo.tar.gz *  把demo.tar.gz中的所有东西都取出来放到当前路径下

# extract all files in demo.tar.gz into current directory

26. find :找文件

find / -name 'tar'  从/这个文件下找名字是tar的文件

find ~/tmp -name '*.txt' -type f -exec d -C {} \;  从~/tmp 文件下找名字是*.txt类型是文件并且执行命令

-name  后面加名字

-type  后面加类型

-exec  后面加想要执行的命令,前面找到的东西是后面命令的输

\;  表示命令的结束

27. date :输出或者设置日期和时间

date +%Y-%m-%d  年月日2017-12-23和%F一样

date +%H:%M:%S  时分秒13:29:03和%T一样

date +%I:%M:%S  以12小时来显示当前的时分秒

date +%c  当前的本地系统时间

date -u  UTC的日期和时间

date -R  RFC-2822格式的时间

date -Iseconds  ISO-8601格式的时间输出到秒,如果最后是Iminutes就是输出到分钟,注意是大写的i:I

28. cut :把一串字符串切开

date -u | cut -d ' ' -f2,3,6  把时间,以空格为工具来切并且取出第2个,第3个和第六个域但是空格和空格相连也会把空格选出来

 cut -d ' ' -f1,2 /etc/mtab  把/etc/mtab里的文件,以空格为工具来切并且取出第1个,第2个

29. tr :转换,压缩,删除字符串

date -u | tr 'a-z' 'A-Z'将所有的输出都转换成大写

echo 'abcdefg' | tr7 -d 'b-e'  把b到e之间的都删掉

echo 'abbbbg' | tr -s 'b'  把中间重复的b压缩成一个

30. nohup :当窗口退出的时候,使得命令继续执行;该命令将不接收输入,所有输出,包括任何错误消息,都将写入文件nohu .out;该命令将作为前台进程运行,后面跟着&时在后台处理

nohup jupyter notebook &  在后台运行jupyter notebook

nohup comm >/dev/null 2>&1 &  在后台运行comm >/dev/null:把输出输到/dev/null;2>&1:把错误输出和标准输出输出到一起

31. ps :显示当前进程的信息

ps aux  显示所有的进程

ps -x  只是显示自己的进程

ps -e --forest  用树的形式显示进程

ps -eo pid,user,cmd  有选择的查看进程。Pid:进程id;user:哪个用户启动的;cmd:查看命令行

32. kill :送一个信号给进程,用来关闭或者其他操作

kill -l  显示可以使用的信号

kill -9 1234  发送无条件终止信号给ID为1234的进程

kill 1234  发送终止信号给ID为1234的进程

33. passwd :设置、修改或者管理用户密码

34. 权限:

chmod :改变文件的权限

                    +  增加权限

-  减少权限

=  设置权限

U,g,o,a  user,group,other,all

1=x;3=wx;2=w;5=rx;4=r;6=rw;7=rwx

35. rm :移除文件或者路径

rm dir/file  删除dir中的文件

rm -r dir  删除dir和他的内容

rm -d dir  删除空的dir

36. rmdir :删除路径

rmdir tmp/d1/d2  d2会被删除

rmdir -p tmp/d1/d2  tmp,d1,d2都会删除

37. ping :发送ICMP ECHO_REQUEST给网络用户

 

Shell脚本:

是一个包含一系列命令的文本文件

1. for循环

$*给你一个包含所有参数的字符串,不能在for循环中提供字符串列表,必须以"$*"开头

echo "Command-line parameters: $*"  这是一个反射命令

$@提供for循环中的字符串列表

for arg in "$@"       这是一个for循环语句,arg是一个变量

do                 dodone是“for循环”主体

echo "arg: $arg"  arg会被变量的值取代

done

2. while循环

$#提供参数的数量   -gt是大于0的意思

$0是命令本身

第一个参数是$1,第二个参数是$2

while [ $# -gt 0 ]; do              这是“while循环,从dodone是它的主体

     case $1 in                  这是case语句,以esac结尾

        -a | --aA )echo "Got $1"   如果$1的值-a-aA,则执行此块;|:或者

            ;;

        -b | --bB )echo "Got $1"   如果$1的值是-b-bB,执行这个block

            ;;

        * ) echo "Received $1"    所有其他情况执行此块

    esac

    shift                       shift将删除第一个参数,依次往后删

done

3. var变量

本质上,Bash变量是字符串。

varA=1234                  我们不需要声明变量

varB=${varA/23/'A B C'}        把A中的23编程A B C并且输出

var=${MYTEST}               环境变量可以直接使用

设置环境变量使用export MYTEST=233;想要查看使用env | grep MYTEST

thatVar=varA                 thatVar的值是一个变量的名字

var=${!thatVar}               间接引用;将varA的值赋给var,如果不加!就会直接取出thatVar中的值;加了!就是取出变量里面变量的值

var=`ls -l`                    将命令的结果赋值给变量

$?                          上一个命令执行的结果

$$                          本身进程的ID

 

展开并计算(())之间的整数表达式

Bash允许对变量进行算术操作和比较。

决定因素是该值是否只含有数字

v1=123 v2=567

((var=$v1+$v2*890))

echo "var is: $var"              最后值是504753

4. 引号的使用

var=`ls -l`           `用来执行,把结果给变量

echo $var           里面空格作为分隔符的值的集合,变量里可以存放很多值

echo "$var"         双引号括起来之后就是一个值了,变量里原来是什么就是什么

echo '$var'          单引号括起来,输出单引号里面的值

for a in $var; do      循环里的不加引号就是用空格分割开的值的集合

echo "=> $a"

done

for a in "$var"; do    用双引号引起来里面就一个值,就是$var一个值

echo "=> $a"

done

5. if语句(命令和参数之间一定要用空格隔开)

if 结束妆台                         0代表真,其他代表假

then

if test 比较表达式或文件测试

then

if [ 比较表达式或文件测试 ]   单括号其实就是test

then

建议使用扩展测试命令。[[和]]是语言里保留的字,并不是一个命令

if [[比较表达式或文件测试]]

then

实际操作中并不需要if语句

v1="Toronto" v2="Beijing"

[[ "$v1" != "$v2" ]] && echo "$v1 is not equal to $v2"

如果前面为真就会执行后面的

v1=123 v2=45

[[ "$v1" -gt "$v2" ]] && echo "$v1 is greater than $v2"

数字比较大小使用-gt,123更大

[[ "$v1" > "$v2" ]] || echo "$v2 is greater than $v1"

字符串比较使用符号。45更大,因为4比1大

dir=~/xyz

[[ -d "$dir" ]] || echo "directory $dir does not exist"

-d表示看看后面的是不是可以执行成一个路径,如果前面为假才会执行后面的

file=~/tmp/readMe.txt

[[ ! -f "$file" ]] && echo "file $file not found."

-f表示看看后面的是不是一个文件

v1=$1 && [[ -z "$v1" ]] && v1=DEFAULT

-z表示查询后面的里面有没有值,如果命令行有值就用命令行里的值,如果没值就用给的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值