linux 运行.sh语句,Linux下的shell命令笔记

shell

Shell 是一种脚本语言,不同于 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。

这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。而 Shell、JavaScript、Python、PHP等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。

这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。

编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。

脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。

Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。

笔录

shell脚本第一行必须以 #!开头,它表示该脚本使用后面的解释器解释执行

介绍下常用的linux命令

创建文件touch命令:touch 文件名

touch 01.sh

查看文件里面的内容cat

cat 01.sh

变更文件权限chmod

chmod 777 01.sh

查看文件夹下的所有内容ls

ls //查看所有文件

ls -al //查看所有文件,并且显示文件权限信息等相关信息

vim文本编辑器的使用vim 的详细说明

vim 01.sh //打开一个文件

然后点击键盘的insert按键,进入编辑模式

退出按ESC,然后再按Shift+;

最后输入wq 保存退出

echo 输出内容

echo "linux"

shell的if条件语句

#!/bin/bash 类似引入头文件,必须引用

02.sh脚本代码:

#!/bin/bash

myDir=/usr/bin #myDir就是一个定义的变量

if [ -w $myDir ] && [ -d $HOME ]

then

touch test6

echo "dir is exist"

cd $myDir

else

echo "dir is not exist"

fi #fi 表示结束条件语句

上面的脚本:判断/usr/bin是否可写,并且是判断home目录是存在,存在创建test6

关于代码中的-w和-d 以及相关命令:

-d 检查是否存在,并且是一个目录

-e 检查file是否存在

-f 检查是否存在,并且是一个文件

-r 检查是否存在 可读

-w 检查文件是否可写

-x 是否可执行

执行

./02.sh

./ 跟上脚本文件,就可以直接执行

结果

733d23e3e0bd

image.png

case in语句

case in语句 相当于Java的switch语句

脚本03.sh 文件

#!/bin/bash

testUser=$1

case $testUser in

rose)

echo "jason";;

david)

echo "david";;

*)

echo "not user";;

esac

上面脚本表示传入的参数是否匹配到case中的字符串,有打印相应的,没有打出默认“not user”

*) 表示默认的条件,相遇Java的switch中的default

;; 这两个连续的分号不能漏,语法要求

执行:代码中的$1 表示的是像脚本传参数,如下:rose就是传的参数

./03.sh rose

结果

733d23e3e0bd

image.png

for语句

01.sh代码:

#!/bin/bash

echo "参数 $1"

echo "参数 $2"

echo "参数长度$#"

for param in "$@"

do

echo "param:$param"

done #done 表示结束循环

上面的代码根据传入的参数进行遍历输出

$1 和$2 根据传入的顺序获取,以此类推,$1到N

$# 表示的是参数的数量

$@ 表示的是所有参数的集合

执行

./01.sh 11 22 # 11和22 分别对应$1 和$2

结果

733d23e3e0bd

for语句.png

数组

默认的空格分隔定义

脚本文件中数组的表示list="Mother Father Brother" 中间采用空格分开,linux系统默认识别空格为分隔符

#!/bin/bash

list="Mother Father Brother"

for item in $list

do

echo $item

done

采用分隔符定义

#!/bin/bash

list="Mother,Father,Brother"

IFS=$,

for item in $list

do

echo $item

done

将IFS设置为逗号,便于做list的分隔符

执行:./04.sh

输出:

733d23e3e0bd

image.png

while 语句

while语句类似Java的while

#!/bin/bash

a=10

while [ $a -gt 0 ]

do

a=$[ $a - 1]

echo "a:$a"

if [ $a -eq 5 ]

then

echo "跳出循环"

break

fi

done

break 左右是跳出循环

运算符

说明

-eq

检测两个数是否相等,相等返回 true。

-ne

检测两个数是否不相等,不相等返回 true。

-gt

检测左边的数是否大于右边的,如果是,则返回 true。

-lt

检测左边的数是否小于右边的,如果是,则返回 true。

-ge

检测左边的数是否大于等于右边的,如果是,则返回 true。

-le

检测左边的数是否小于等于右边的,如果是,则返回 true。

执行: ./05.sh

结果:

733d23e3e0bd

image.png

grep 查找命令

06.sh 脚本代码:

#!/bin/bash

file=test6

testUser=jason

if grep $testUser /etc/passwd

then

echo "ok"

fi

上面代码中:

$testUser 查找的内容

/etc/passwd 文件的路径 文件内容里面去找

执行:./06.sh

结果:

733d23e3e0bd

image.png

在当前例子中使用到 grep查找命令, 如:grep -n bin 01.sh

常用的 grep 选项有:

-c 只输出匹配行的个数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

-V 显示软件版本信息

使用grep匹配时最好用双引号引起来,防止被系统误认为参数或者特殊命令,也可以匹配多个单词。

关于匹配的实例:

grep -c "48" test.txt 统计所有以“48”字符开头的行有多少

grep -i "May" test.txt 不区分大小写查找“May”所有的行)

grep -n "48" test.txt 显示行号;显示匹配字符“48”的行及行号,相同于 nl test.txt |grep 48)

grep -v "48" test.txt 显示输出没有字符“48”所有的行)

grep "471" test.txt 显示输出字符“471”所在的行)

grep "48;" test.txt 显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行

grep "48[34]" test.txt 显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)

grep "[48]" test.txt 显示输出行首不是字符“48”的行)

grep "[Mm]ay" test.txt 设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)

grep "K…D" test.txt 显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)

grep "[A-Z][9]D" test.txt 显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行

grep "[35]..1998" test.txt 显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行

grep "4{2,}" test.txt 模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行

grep "9{3,}" test.txt 模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行

grep "9{2,3}" test.txt 模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行

grep -n "^$" test.txt 显示输出空行的行号

ls -l |grep "^d" 如果要查询目录列表中的目录 同:ls -d *

ls -l |grep "^d[d]" 在一个目录中查询不包含目录的所有文件

ls -l |grpe "^d…..x..x" 查询其他用户和用户组成员有可执行权限的目录集合

输出到文件中

#!/bin/bash

file=test6

echo "david">$file

echo "tim">>$file

执行完代码之后会找到test6的文件,打开可以看到

david

tim

结束

暂时先将笔记做到这边,后续有新的再来更新,如果上面的有错误,欢迎指出。

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值