SHELL基础

语法

shell是人和计算机内核之间的中介
计算机的语言是二进制,把人类的翻译成计算机能够识别的语言,然后让内核来处理
内核完成齐后要把结果反馈给用户,要把计算机的翻译成人类能够识别的语言

shell脚本:扩建语言,或者是动态语言,是一种编程的语言。控制软件的应用程序,只要在被调用时,才会执行。

  • 脚:把保存在文本当中代码执行起来
  • 本:代码是保存在文本当中,特定条件(运行代码的条件)

shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以通过脚本和计划任务来进行自行运行。
  • 减轻了管理人员的工作量
  • 避免配置出错

命令解释器

Windows中:
pycharm,idel,vscode

Linux中:

  1. bash:主流,也是现在市面上绝大多数的linux系统默认的shell
  2. csh:类C语言的shell
  3. tcsh:和csh类型,相当于升级版
  4. nologin 也是一种shell,禁止用户登录

shell脚本的结构

vim first.sh #默认以.sh为结尾的文件是脚本文件
#!/bin/bash
#声明的脚本默认解释器,这个可以不加,默认就是bash

#this is my first shell-script
#以"#"开头。表示当前的内容为注释内容,注释的内容是不会被运行的,写代码要养成写注释的习惯,方便其他人阅读和理解

#可执行语句: #所有的linux可执行的命令都可以是代码的内容
cd /boot
echo "当前所在的目录:"
#在shell当中的作用相当于打印,echo要打印的内容都是字符串,推荐使用双引号引来。

pwd
echo "展示其中以vml开头的文件:"
ls -lh vml*

  1. 调试模式
    脚本没有权限的情况下的运行模式
    bash 代码名:创建一个子shell环境,只在这个子环境当中运行,不会真正的执行代码运行结束,子环境也会退出。
    sh 代码名
    source 代码名:点命令 . 真正的运行可执行的代码。

  2. 赋权执行
    在工作中所有的脚本都是赋权执行的
    chmod 777 代码名
    ./代码名
    /yopt/代码名

  3. 定时任务执行
    脚本必须要是绝对路径(也需赋权)
    crontab -e

重定向

就是把这些信息保存到指定的文件当中去
这些信息:标准输入,标准输出,标准错误输出

  1. 重定向输入
    passwd --stdin dn < passwd.txt #用户从passwd.txt获取密码

  2. 重定向输出:

  • >  只能把标准输入保存到文件当中去,如果原文有内容会直接覆盖  
    
  • >> 标准输出保存到文件当中去,不会覆盖原内容,而是在原内容之后追加。
    
  1. 重定向错误输出
  • 2> 将错误信息保存到指定的文件,文件当中的内容也会被盖。
  • 2>> 将错误信息保存到指定的文件,文件当中的内容不会被覆盖而是在行后追加
  1. 混合输出
  • &> 将标准输出、标准错误保存到同一文件中,覆盖原内容
  • &>> 将标准输出、标准错误保存到同一文件中,文件当中的内容不会被覆盖而是在行后追加

变量

用来存放系统和用户需要使用的特定的参数

  • 变量名:系统定义好的,每个用户都可以使用(全局变量)一般情况下是不可以修改的

  • 自定义变量:要是用户定义的名称和名称对应的参数(值)

自定义变量名

  1. 不要使用系统的命令作为变量名称
  2. 不要使用中文
  3. 变量名不能使用特殊符号开头,可以使用下划线“_"开头
  4. 定义变量时一定要是字母开头,不能以数字开头
  5. 变量名最好是对应名称的英文全称或者简写

变量值

int------整数,没有小数点
string------字符串 字母或者数字组成,会用引号引起来
布尔------true false 为真还是为假(一般条件判断的返回值)
浮点------1.23

打印变量

echo $变量

root@u3:/opt# a=1086
root@u3:/opt# echo $a
1086

echo “${变量}打印内容”

root@u3:/opt# echo "${a}按按"
1086按按
read -p "提示信息" a
#read:根据用户输入直接赋值给变量 -p “ ”
固定格式 a变量名
echo $a

root@u3:/opt# vim first.sh
read -p "a=" a
read -p "b=" b
echo $a $b
root@u3:/opt# bash first.sh
a=10
b=20
10 20

强引用和弱引用

  • “ ”:弱引用,打印变量时,加上双引号就是变量的值
  • ’ ':强引用,打印变量时,就是字符串的本身。不再代表变量对应的值

变量的作用范围

  1. 全局变量(主要是系统定义的,不能改的)
    在全局配置文件当中修改,export 变量名=值,所有用户都可以使用
    如果有需要一直不变的参数可以供所有人使用,就可以配置全局变量
    副作用:一旦有改动,增加了复杂性
root@u3:/opt# vim first.sh
echo $a $b
root@u3:/opt# vim /etc/profile
#自定义全局变量
export a=1
export b=2
root@u3:/opt# source /etc/profile
root@u3:/opt# bash first.sh
1 2
  1. 环境变量(也是全局变量的一种),系统创建的,设置用户的工作环境
    由系统维护,一般用户是不去修改的,让所有人都可以自动识别到(自动补齐)
env  #查看所有预设变量
echo $USER #当前登录的用户
echo $HOME #当前用户的家目录
echo $PATH #查看当前的搜索路径,这些目录下的文件可以在任意地方识别到,自动补齐

chmod 777 /opt/文件
PATH="$PATH:/opt"   #添加让系统自动识别
root@u3:/opt# echo $PATH
/usr/local/sbin: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/games: /usr/local/games: /snap/bin: /op
  1. 位置变量(脚本外传参)
root@u3:/opt# vim first.sh
a=$1
b=$2
echo $a $b
root@u3:/opt# bash first.sh

root@u3:/opt# bash first.sh 10 20
10 20
  1. 预定义变量(全局变量的一种,脚本解释器提供的,或者是编程语言自带的,不能修改)
  • $*
  • $@

$*与$@表示命令或者脚本需要处理的参数,区别在于处理的方式不同
区别
$*,会把传入的参数当做一个整体来进行处理,不加双引号和$@是一样的,都是一个个处理
$@,加不加双引号,都会把参数一个一个的处理

root@u3:/opt# vim first.sh
abc() {
for i in "$@"
do
echo "$i"
done
}
abc "hello" "world" "!"
root@u3:/opt# bash first.sh
hello world !
root@u3:/opt# vim first.sh
abc() {
for i in $@
do
echo "$i"
done
}
abc "hello" "world" "!"
root@u3:/opt# bash first.sh
hello
world 
!
  • $#:记录传递给脚本参数的个数
root@u3:/opt# vim first.sh
echo "输入了多少个数:$#"
root@u3:/opt# bash first.sh 1 2 3 4 5 6 7 8 9
输入了多少个数:9
  • $?:记录的上一次执行命令的返回码,用来判断上一次执行的命令是否成功
    0和非0
    只有0表示上一次的命令执行成功,其他的都是失败

变量的运算

整数运算

#整数运算
运算符
+
-
*
/
% 取余


$(())
root@u3:/opt# vim first.sh     
a=1
b=2
c=$(($a+$b))
echo $c
root@u3:/opt# bash first.sh
3
root@u3:/opt# vim first.sh     
c=$((2+3))
echo $c
root@u3:/opt# bash first.sh
5
expr
root@u3:/opt# vim first.sh
i=$(expr 2 \* 5)             #expr乘法需  \*
echo $i
root@u3:/opt# bash first.sh
10
let
root@u3:/opt# vim first.sh     #let
let i=100*10
echo $i
root@u3:/opt# bash first.sh```
```css
i++    都是表示自增1 i=i+1  先赋值再加 i=0 i=1+1    自增2  i+=2
++i   先加,再赋值i=0  i=0+1

i--  表示i自减1   i=i-1   i-=2
--i

非整数运算

bc

bash 默认不支持小数运算

命令行:echo 4.4*4.4 | bc

vim:
root@u3:/opt# vim first.sh
num=$(echo "4.4+4.4" | bc)
echo $num
root@u3:/opt# dash first.sh
8.8
awk
root@u3:/opt# vim first.sh
num=$(awk 'BEGIN{print 4.45*1.2}')
echo $num
root@u3:/opt# bash first.sh
5.34
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值