linux_shell入门

shell是什么

        在计算机科学中,shell是一个命令解释器,我们知道我们是通过计算机的操作系统来控制硬件的,同样的,我们的应用程序也是通过计算机操作系统来控制底层的硬件,但是应用程序是不能直接操控操作系统,在应用程序和操作系统当中还有一个层级就是shell,shell是操作系统和应用程序之间的接口,shell先处理应用程序发送过来的信息,然后解释给操作系统,同时将操作系统的结果解释给应用程序,总的来说,shell就是在操作系统和应用程序之间的命令编译工具。

shell练习

        不得不说一下,shell经过多年的发展,在linux上已经迭代了很多年,而我们现在使用的shell就是/bin/bash这个版本。

第一个脚本

首先创建一个以sh为后缀结束的的文件

touch a.sh

编辑这个文件

vim a.sh

在里面输入一条命令 

#! bin/bash

echo "起飞"

差不多好了,为什么差不多呢?因为我们要的文件是一个可执行文件,而一般刚创建出来的文件权限只有可读和可写,没有可执行,所以我们要把这个权限加上去。

输入命令,把全部的权限开放

chmod 777 a.sh

再执行

./a.sh

好了,接下来会输出echo里面的语句

shell注释

单行注释

在语句前面增加#号

#起飞

多行注释

:<<!
起飞
    !

或者

:<< 字符

注释的内容
    
    字符

额,一般都用第一个,我感觉有些同学会在第二个上面搞些骚操作

:<< 字符

注释的内容
    
    字符

shelll普通变量

方式一

                变量名=变量值

要求:变量必须是一个整体,中间没有特殊字符

number=10
echo $number

方式二

                变量名='变量值'

要求:单号中的内容,原样赋值

number='10'
echo $number

方式三

                变量名="变量值"

要求:如果双引号里面有其他变量,会把变量结果进行拼接,然后赋值

number="10"
echo $number

一般来说数字是不加双引号的,其他的默认加双引号

顺便说一下等号要贴着写,不要留空格,这个差点看不出来哪错

命令变量

方式一

        变量名=`命令`     注意这里是反引号,就是tab键上面那个键打出来的

d=`data`
echo $d

方式二

        变量名=$(命令)   将执行后的结果赋值给变量

d=$(data)

echo $d

建议使用第二种方式

使用变量

方式一

        $变量名        非标准写法

不介绍

方式二

        $'变量名'        非标准写法

不介绍

方式三

        ${变量名}        加了一个大括号

不介绍

方式四

        "${变量名}"        标准使用方式

d=$(data)

out="现在的时间为"${d}""

echo $out

只读变量

        只读变量就是只能读,不能用的变量

d=$(data)

out="现在的时间为"${d}""

echo $out

unset out

echo "${out}"

运行一下就会发现这个变量不会输出

shell数组

定义数组

数组名=(值1 值2 ...值n)

arry=(1 2 3 4)

给数组的元素赋值

数组名[索引]=值 

arry[0]=1

是不是感觉很熟悉啊

获取元素

${数组名[下标]} 

${arry[0]}

获取长度

${#数组名[*]}

${#arry[*]}

${#数组名[@]}

${#arry[@]}

获取数组长度的语法和获取索引的语法差不多,只不过多了一个#号,这个符号应该是统计的意思

如果在里面的索引填0的话会返回1

${#arry[0]}

算术运算符

        运算符的使用和我们平时在java中的使用一样,无非就是

+ - * / % = ++ --

这几个符号,我觉得可以不用再说了,如不过原生的bash不支持简单的数学运算,可以通过其他命令实现如expr,简单来说你的表达式前面要加上expr这个命令,而且表达式和运算符之间要有空格,完整的表达式还要被反引号包含。另外自加需要用两个括号包含起来。

num=`expr 2 + 2`

echo "${num}"

e=1

((e++))

echo $e

字符串运算符

        所谓字符串运算符就是对字符串进行比较的运算符,常见的运算符有

= 检测两个字符串是否相等

!= 检测两个字符串是否不相等

-z 检测字符串长度是否为0

-n 检测字符串长度是否不为0

$ 检测字符串是否为空,不为空返回true 

举个例子

a="aaa"
b="bbb"

[ "${a}" = "${b}" ]

#用$?可以获取上一条语句的执行结果

echo $?
#输出0或1,0为真,1为假

[ $"{$a}" ]
#判断字符串是否为空
echo $?

顺便说一下,字符串和运算符之间要有空格,中括号和字符串也要空一格,不然输出结果不正确

关系运算符

         关系运算符就是比较两个数之间的关系,不支持字符串,除非字符串的值是数字,如

-eq -ne -gt -lt -ge -le

一开始看上去不熟悉,但是这几个运算符就是equals,greater,lesster,not的缩写,所以第一个-eq,就是等于,-ne是不相等(not equals),-gt大于,-lt小于,-ge(greater or equals)大于等于,-le(lesster or equals)小于等,举个例子

a=33
b=44

[ "${a}" -eq "${b}" ]

echo $?

布尔运算符

        

! 取反运算

-o 或运算,有一个表达式为true则返回true

-a 与运算,两个表达式为true才返回true

举个例子

a=123
b=456

[ $a -lt 20 -o $b -gt 100 ]

echo $?

逻辑运算符

&& 运算符左右两边为true才返回true
|| 运算符只有两边为false才返回false

举个例子

a=100
b=101

[[ "${a}" -gt 99 || "${b}" -lt 100 ]]

echo $?

判断语句

        说白点就是各种语言里面的if,else的语句

单分支

if [条件]
then 
    语句体
fi

 双分支

if [条件]
then 
    语句体
else
    语句体
fi

多分支

if [条件1]
then 
    语句体
elif [条件2]
    语句体
elif
    语句体
fi

举个栗子

a=123
b=456

if [ $a -gt $b ]
then
    echo "true"
fi

选择语句

        其实和Java里面是switch语句差不多

case 值 in
模式1)
    语句体
    ;;
模式2)
    语句体
    ;;
esac

举个例子

word="cxk"

case "${word}" in
"cxk")
    echo "cxk"
    ;;
"xz")
    echo "xz"
    ;;
esac

shell循环语句

if循环

for 变量 in 范围
do 
    循环体
done

举个栗子

for val in a b c d e 
do 
    echo "${val}"
done

while循环

while 条件
do 
    循环体
done

举个栗子

a=1

while [ "${a}" -lt 10 ]
do
    echo "${a}"
    ((a++))
done

函数

        函数就是对功能的封装

没有参数的函数

test(){
    echo "函数输出"
}

test

有参数没返回值的函数

test1(){
echo "第一个参数$1"

echo "第二个参数$2"

}


test1 3 5

有参数有返回值的函数

test2(){
 echo "接收到参数$1和$2"

 return $(($1 + $2))
}


test2 25 50 

echo $?

键盘输入练习

#使用read关键字可以从键盘录入的数据赋值给变量
#如

read number

echo $number

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值