Linux shell初步学习笔记

来源:互联网 发布:sizeof 结构体数组 编辑:程序博客网 时间:2024/05/17 01:38

linux命令可以分为内部命令和外部命令,内部命令在系统启动时候就调入内存,是常驻内存的;而外部命令是系统的软件功能,用户需要的时候才从硬盘读入内存。

shell是用来接受用户命令,然后调用相应的应用程序接口,同时也是一种 程序设计语言,作为命令语言,具有交互式解释和执行用户输入的命令或者自动的解释和执行预先设定好的一连串的命令,有点类似windows下面的批处理。

 

命令可以使用通配符,例如ls *.c 表示列出当前目录下的C文件。

*:匹配任何字符和字符串包括空字符串,xp系统的文件搜索设置里面的印象比较深刻

?:匹配任何一个字符,注意是字符的个数是1。比如?abc,可以匹配任何以abc结束任意开头的4个字符的字符串。

[..]匹配括号里面列出的任何单字符,比如abc[def],可以匹配任何以abc开头,以def中任何一个字符结尾的字符串。

 

history[n]用来察看近n条记录

 

命令的别名:

命令的别名是自定义一个命令代替其他命令。可以作为其他命令缩写。

格式 alias bieming='mingling';例如:aliaslist='ls -l';

取消别名用 unalias bieming  unalias list

 

 

shell程序的基本结构

 

基本特征:

1)所有的shell程序的第一行都是#!开头,后面的是解释器的目录和名称

如:#/bin/bash

2)第二行以#开头写的是程序的名字和用途,方便以后看,这是一种习惯

 (3)编写完成shell命令后要改变运行权限

命令:chmod 777 shell文件名字

 

局部变量

shell文本如下

#!/bin/bash

#bianliang

a=123

b=1.23

echo $a

echo $b

 

这里对变量的输出变量前面要加上 $

赋值的时候不能出现空格

比如c=ads dsd 这是错误的。

此外注意的是 如果echo 要输出一句话,要用单引号

 

环境变量

环境变量一般大写,打开一个终端,输入exportenter就可以察看。

export HJBL 这个语句用来定义环境变量。

如果在系统配置里面定义环境变量,即使系统重启后也可以访问环境变量

 

环境系统的配置文件是/etc/profile,在文件最后一行进行环境变量定义重启后就会产生

 

位置变量

 

shell程序运行的时候传入的参数,在程序里面可以用变量的形式来调用这些参数。感觉这个就像C语言里面的

scanf函数一样,把你输入的值,传递到程序里面,又做参数。

这些参数被存放到名为1~99个变量里面,被形象的成为位置变量。但是访问形式同普通变量一样。

 

在位置变量里面$0的值是bash

 

比如我们编辑如下代码,

#/bin/bash

#位置变量

echo $1

echo $2

然后保存改变权限然后运行后在命令中输入hello world,会出现

hello

world

 

运算符

比如+ -:语法都符合C语言算术运算符。但是 **=:表示的是对两个变量做幂的运算

 

直接对运算表达式进行输出是不可以的,比如echo 1+2,不会输出3,只会输出1+2

 

可以用下面三种办法解决

1.echo `expr 1+2`,值得注意的是这里没有单引号,是tab键上面的那个符号。expr表示后面的是一个表达式运算。

 

2.还可以使用let指示数学运算,可以先把运算结果赋值给变量b,运算命令是b=let 1+2,然后输出b

3.用这个也可以$[],里面是数学表达式。

 

 

ehco命令前面已经用到多次了,下面就是这个命令的具体介绍

 

echo命令用来输出结果,可以输出文本和变量的值,可以输出到终端,也可以输出到文本。

 

如果要输出特殊字符,需要加-e选项,比如格式控制字符,末尾加\c

表示不换行,\t相当于按下tab键等等。

 

在输入文件里面的时候,就要格外用到两个操作符,重定向输入和重定向输出。

>这是重定向输入 比如ls -a >>test 把当前的文件目录输入到test文件,test没有则会创建,有的话就覆盖原来内容。

>>这个是用来追加方式

 

read用来读信息,和echo命令相反。可以从键盘或者文件里面读入信息,并且赋值给一个变量

 

具体的规则如下

1。如果只是要读入一个变量,则会把键盘上输入的所有的信息赋值给这个变量,按enter结束。

2.如果输入多个变量,需要用空格键把变量隔离开。如果输入多余输出,剩余的赋值给最后一个。

3.读语句后加<filename,表示从文件里面读变量。filename 是文件的名字。

 

例如:read A,读取一个变量赋值给A。然后输一些字符,然后把A输出就可以看到赋值成功。

vim a.txt

输入aaa bbb 保存退出。

read A B <a.txt 然后输出就可以看到结果。

 

文件重定向

重定向输入,重定向输出,重定向错误输出。

错误输出就是多了一个2

比如现在用cat hello >test.如果hello不存在,就会出错。直接在终端弹出,用cat hello 2>test就会把这个错误信息放到test文件里面

 

<这个符号是重定向输入。一般默认的输入都是键盘,比如上面提到的给变量赋值readA,然后在通过键盘输入,A的值是通过键盘来的,但是后面那个

read A<a.txt,就把txt设置为了赋值时候的输入。

 

 

引号的使用注意事项:

1.双引号:表示直接引用的是一个字符串,里面不能直接使用 $,引号。双引号。反斜线等等。类似与C语言。

2.单引号:但引号表示引用的是一个字符串,和双引号类似。双引号里面引用单引号。

3.反引号:反引号用来执行系统命令然后将命令,然后将命令的结果返回,这个返回的结果可以赋值给一个变量。是tab键上面的那个。

例如echo `date`

4.反斜线:基本类似于C语言里面的

测试语句:test

 

文件测试

 

参数

-d 是否是一个目录

-f是否是正规的文件

-L 是否是符号链接

-x测试文件是否可执行

-s测试文件是否非空
-w测试文件是否可写
-u测试文件是否有suid位设置
-r测试文件是否可读 

 

数值测试:

用来比较两个数的大小或相等关系。

test num1 fuhao num2

-eq相等

-le第一个不大于第二个

-gt第一个是否大于
-ne 两个数是否不等
-ge 第一个数是否小于第二个数
-lt 第一个数是否小于第二个数 

结果是1表示不符合条件,0表示符合条件

也可以用[] 代替test 中括号两边必须留有空格。

 

 

字符串测试

=是否相等

=是否不等

-z是否为空

-n是否非空

 

逻辑测试

 

a:逻辑与

-o:逻辑或

!:逻辑非

if语句
最常用的条件判断语句,和C语言差不多
格式
if 
条件
then 
命令1
else
命令2
fi

如果判断结果有多种可能
if 
条件
then 
命令1
elif 
条件2
then 
命令2
else
命令3
fi
可以把then写在if后面但是要用分号隔开
例子:
#!/bin/bash
#if
i=$[ $1 % 2 ]
if test $i -eq 0
then echo oushu
else
echo
jishu
fi

#!/bin/bash
#
判断文件是否可写
if test -w $1
then
 echo "writeable"
else
echo "unwriteable"
fi
if test -x $1
then echo "excuteable"
else
echo "unexcuteable"
fi

for语句
for 变量名字 in 列表
do 
命令1
命令2
done

例如:
#/bin/bash
for char in a s d f g
do
    echo $char
done
如果省略in后面的关键字的时候,将接受输入命令时候的参数作为循环变量
#!/bin/bash
#chengfakoujue
for i in 1 2 3 4 5 6 7 8 9
do
for j in 1 2 3 4 5 6 7 8 9

do
    if[ $j -le $i ]
    then 
    echo -e "$j\c"
    echo -e "*\c"
    echo -e "$i\c"
    echo -e "=\c"
    echo -e "$[ $i*$j] \c"
   fi
done
echo ""
done

until语句
until 条件
do
命令1
...
done

#!/bin/bash
sum=0
i=1
until [ $i -gt $j ]
do
    sum=$[$i+1]
done
echo $sum


0 0
原创粉丝点击