• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Shell脚本编程入门--Day1

武飞扬头像
通过全部用例
帮助1

什么是shell?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
1, 将使用者的命令翻译给核心(kernel)处理。
2, 同时,将核心的处理结果翻译给使用者

什么是bash呢? shell的一种。

输出打印hello

#! /bin/bash 固定格式, 指定解释器为bash
‘#’ 是注释符

[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ cat hello.sh
#! /bin/bash

# 这是第一个shell脚本编程
echo "hello shell"

运行的时候会发现没有权限, 解决方案:
1, 添加可执行权限 chmod u x hello,sh
2, /usr/bin/bash hello.sh 指定解释器去运行

或者: 直接这样去执行
source hello.sh
. hello.sh
bash hello. sh
bash < hello.sh
他们的区别 : bash/sh会创建一个新的子进程去执行, 而 source 和 点 会在当前进程去执行。

shell脚本语言本质是一种弱语言。 定义变量的时候,不需要提前指定类型
C/C 是强语言, 使用的时候必须给定类型。

查看shell解释器

[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

变量

重提核心终点:bash/sh会创建一个新的子进程去执行命令或者脚本,而source/点会在当前进程
如果说用bash/sh去执行,一般不会保留变量!!!

变量的生命周期都是随shell进程的

直接输出指令 name=“zhangsan” 不能有空格
echo $name 输出变量


变量的作用域:本地变量只针对于当前shell进程,意味着无论是父进程还是子进程,都是看不到的

铺贴: 介绍pstree指令, 显示进程树

学新通

环境变量, PATH称为全局变量,当前shell进程和以后的任意子进程

查看环境变量 ehco $PATH

特殊变量:$?

值为0——255 返回上一个进程执行的退出码, 0是成功

单引号和双引号变量的区别

单引号不识别特殊语法, 双引号识别特殊语法


反引号的作用(在键盘的esc下面):会把执行结果给替换

[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ name=`ls`
[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ echo $name
hello.sh test.sh

shell变量的面试题(白嫖的b站免费课程,所以就懒得换了, 哈哈~~)
学新通
结果 : C, 解析 :sh/bash会创建新的子进程去执行,而变量的作用域在当前进程。

环境变量的设置和显示

set,可显示当前shell进程的全局变量和局部变量(包括shell脚本定义的变量)
env,只显示全局变量
declare, 和set一样
export,设置和显示环境变量
readonly 设置只读变量

unset,删除变量或函数

如何过滤出所有的环境变量名呢

export 显示所有的环境变量
通过awk命令

# -F 文本显示   '[ :=]’ 指定分隔符为空格和等号   '{}print $3}' 输出分割后的第三个内容
export | awk -F '[ :=]' '{print $3}'

特殊变量

参数传递
例如
ls -a -l # 参数-a -l传递给了ls

$0 输出脚本文件
$1 第一个参数
$n 第n个参数
$# 获取参数个数
$* 获取所有的参数
$@ 获取所有的参数

[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ cat test.sh
echo $0  # 输出脚本文件名 
echo $1  # 输出第一个参数
echo $2  # 输出第二个参数

echo $#  # 输出参数个数

echo $*  # 输出所有参数
echo $@  #输出所有参数
[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ bash test.sh chen lang da shuai bi
test.sh
chen
lang
5
chen lang da shuai bi
chen lang da shuai bi

学新通

面试题 : >$* 和 $@的区别

都是输出所有的参数
如果两者都是在引号的包围下, ∗ 会将整体当成一份, *会将整体当成一份, 会将整体当成一份,@会当成各自独立的一份
用for循环打印测试

[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ cat test1.sh


for i in "$*"
do
    echo "$i"
done

echo "----------------------------------------" 

for i in "$@"
do
   echo "$i"
done

[chen@iZ0jl780lb0oio7v4b0chbZ shell_test]$ bash test1.sh chen lang da shuai bi
chen lang da shuai bi
----------------------------------------
chen
lang
da
shuai
bi

学新通

特殊的状态变量

$? 上一次命令执行状态的返回值
$$ 当前shell脚本pid
$! 上一次后台进程的pid (nohup)
$_ 上次命令的最后一个参数

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcbicj
系列文章
更多 icon
同类精品
更多 icon
继续加载