Linux学习之shell1

shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的,
就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。

Shell通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,
简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。

shell 编程有哪些注意事项
。shell 命名: Shell脚本名称命名一般为英文、大写、小写,后缀以.sh结尾
。不能使用特殊符号、空格
。见闻之意,名称要写的一眼可以看出功能
。shell 编程 首行需要 #/bin/bash 开头
。shell 脚本变量不能以 数字、特殊符号开头,可以使用下划线一,但不能用破折号

1.第一个shell程序

1.创建一个shell脚本

[root@VM-12-14-centos ~]# touch Helloword.sh
[root@VM-12-14-centos ~]# ll
total 52
-rw-r--r-- 1 root root   773 Aug 11  2022 centos7.sh
-rw-r--r-- 1 root root  1781 Apr  8  2021 cosfs.sh
-rw-r--r-- 1 root root  1237 Jan 28  2021 dnspod.sh
-rw-r--r-- 1 root root     0 Oct  8 23:52 Helloword.sh
-rw-r--r-- 1 root root 30239 Aug 11  2022 install_panel.sh
-rw-r--r-- 1 root root  2258 Mar  3  2021 install.sh
-rw-r--r-- 1 root root  1219 Feb  5  2021 txcdn.sh

2.编辑shell

[root@VM-12-14-centos ~]# vim Helloword.sh
echo "hello world"
~                      
~          
~          

echoShell的一个内部指令,用于在屏幕上打印出指定的字符串。

3.获取执行权限

[root@VM-12-14-centos ~]# chmod o+x Helloword.sh
[root@VM-12-14-centos ~]# ll
total 56
-rw-r--r-- 1 root root   773 Aug 11  2022 centos7.sh
-rw-r--r-- 1 root root  1781 Apr  8  2021 cosfs.sh
-rw-r--r-- 1 root root  1237 Jan 28  2021 dnspod.sh
-rw-r--r-x 1 root root    19 Oct  9 00:01 Helloword.sh
-rw-r--r-- 1 root root 30239 Aug 11  2022 install_panel.sh
-rw-r--r-- 1 root root  2258 Mar  3  2021 install.sh
-rw-r--r-- 1 root root  1219 Feb  5  2021 txcdn.sh

4.执行shell脚本

[root@VM-12-14-centos ~]# ./Helloword.sh
hello world

2.shell的系统变量介绍

什么是变量
很多人可能会说,可以变化的量就是变量。但是发现很多汉语意思很强大,你看的懂的字,却不一定可以理解它的意思。这里你可以理解为 a = 1,同时还可以 a =2、a = 3 ,不同的值都可以复制给同一个变量 a 。

常见的3种变量
Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,Shell变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。

输出方式

输出时使用单引号,会将单引号中的内容完整的输出。
[root@VM-12-14-centos ~]# test=erlang
[root@VM-12-14-centos ~]# echo '$test'
$test

输出时使用双引号,则会将变量test的值erlang进行输出
[root@VM-12-14-centos ~]# echo "$test"
erlang

没引号,也会将变量test的值erlang进行输出
[root@VM-12-14-centos ~]# echo $test
erlang

增加变量
如果需要增加变量的值,那么可以进行变量值的拼接。
不过变量需要用双引号包含"$变量名"或用${变量名}包含变量名。
[root@VM-12-14-centos ~]# test="$test"dsa
[root@VM-12-14-centos ~]# echo $test
erlangdsa

变量的查看

set [选项]

-u:如果设定此选项,调用未声明变量时会报错(默认无任何提示)

默认
[root@VM-12-14-centos ~]# echo $sdadw

[root@VM-12-14-centos ~]# 

执行set -u
[root@VM-12-14-centos ~]# set -u
[root@VM-12-14-centos ~]# echo $sdadw
bash: sdadw: unbound variable
取消set +u
[root@VM-12-14-centos ~]# set +u
[root@VM-12-14-centos ~]# echo $sdadw

[root@VM-12-14-centos ~]# 

-x:如果设定此选项,在命令执行之前,会把命令先输出一次

[root@VM-12-14-centos ~]# set -x
++ history -a
++ printf '\033]0;%s@%s:%s\007' root VM-12-14-centos '~'
[root@VM-12-14-centos ~]# echo $test
+ echo erlangdsa
erlangdsa
++ history -a
++ printf '\033]0;%s@%s:%s\007' root VM-12-14-centos '~'

+<参数> :取消某个set曾启动的参数。

直接使用set 命令,会查询系统中所有的变量,包含用户自定义变量和环境变量

位置变量

$n :n为数字,$0表示当前 Shell 脚本程序的名称,$1-$9表示第一个到第九个参数,10以后的需要用大括号{}。

测试,计算两数之和

在下列执行过程中,1是第一个参数,12是第二个参数,此shell脚本中将第一个参数和第二个参数求和。

Sum.sh
expr $1+$2 |bc
执行
[root@VM-12-14-centos ~]# ./Sum.sh 1 1 
2
[root@VM-12-14-centos ~]# ./Sum.sh 1 12
13

$*:这个变量代表命令行中所有的参数

$# :这个变量代表命令行中所有参数的个数

Sum.sh
expr "参数1:$1"
expr "参数2:$2"
expr "所有参数:$*"
expr "参数个数:$#"

[root@VM-12-14-centos ~]# ./Sum.sh 1 12
参数1:1
参数2:12
所有参数:1 12
参数个数:2
预定义变量:

$? :最后一次执行的命令的返回状态

[root@VM-12-14-centos ~]# $?
bash: 0: command not found
[root@VM-12-14-centos ~]# echo $?
127
[root@VM-12-14-centos ~]# echo $?
0

上一次执行Sum.sh成功,所以输出$? 返回的是0,当$? 这个变量为0,则表示上一个命令执行命令执行正确,当这个变量不为0的其他数,则表示上一个命令执行出现问题。

$$:表示当前进程的进程号Pid

[root@VM-12-14-centos ~]# echo $$
31892

可以通过ps -f 查看当前的进程
 

[root@VM-12-14-centos ~]# ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
root     20021 31892  0 01:15 pts/0    00:00:00 ps -f
root     31892  1322  0 Oct08 pts/0    00:00:00 bash --login

算数运算符:

加法
[root@VM-12-14-centos ~]# echo `expr 15 + 1`
16
减法
[root@VM-12-14-centos ~]# echo `expr 15 - 1`
14
乘法
[root@VM-12-14-centos ~]# echo `expr 15 \* 2`
30
除法
[root@VM-12-14-centos ~]# echo `expr 15 / 2`
7
取余
[root@VM-12-14-centos ~]# echo `expr 15 % 2`
1

关系运算符:

-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
[root@VM-12-14-centos ~]# [ $a -eq $b ]
[root@VM-12-14-centos ~]# echo $?
1
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
[root@VM-12-14-centos ~]# [ $a -ne $b ]
[root@VM-12-14-centos ~]# echo $?
0
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
[root@VM-12-14-centos ~]# [ $a -gt $b ]
[root@VM-12-14-centos ~]# echo $?
1
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
[root@VM-12-14-centos ~]# [ $a -lt $b ]
[root@VM-12-14-centos ~]# echo $?
0
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
[root@VM-12-14-centos ~]# [ $a -ge $b ]
[root@VM-12-14-centos ~]# echo $?
1
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。
[root@VM-12-14-centos ~]# [ $a -le $b ]
[root@VM-12-14-centos ~]# echo $?
0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值