linuxshell脚本基础

fengxixiaoxiao fengxixiaoxiao     2022-12-13     262

关键词:

编程基础
?Linus:Talk is cheap, show me the code
?程序
?程序:算法+数据结构
?数据:是程序的核心
?数据结构:数据在计算机中的类型和组织方式
?算法:处理数据的方式

程序编程风格:
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
?shell程序:提供了编程能力,解释执行

编程基本概念
?编程逻辑处理方式:
顺序执行
循环执行
选择执行
?shell编程:过程式、解释执行
编程语言的基本结构:
各种系统命令的组合
数据存储:变量、数组
表达式:a + b
语句:if

shell脚本基础
?shell脚本:
包含一些命令或声明,并符合一定格式的文本文件
?格式要求:首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
?shell脚本的用途有:
?自动化常用命令
?执行系统管理和故障排除
?创建简单的应用程序
?处理文本或文件

 建?脚本

vim hello.sh
#!/bin/bash
echo "hello world"

---------------------
脚本调试

检测脚本中的语法错误
bash -n disk.sh

调试执行
bash -x disk.sh

---------------

运?脚本:
添加执行权限
chmod +x disk.sh

直接运行bash 

bash disk.sh

PATH变量的使?

[[email protected] data]# PATH=.:$PATH    把.加入PATH变量
[[email protected] data]# echo $PATH
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[[email protected] /]# PATH=/data:$PATH   把/data加入PATH变量
[[email protected] /]# echo $PATH
/data:.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

------------------------------------

变量:

脚本中的变量
Shell中变量命名法则:
1、不能使程序中的保留字:例如if, for
2、只能使用数字、字母及下划线,且不能以数字开头
3、见名知义
4、统一命名规则:驼峰命名法
Shell中命名建议规则:
1、变量名大写
2、局部变量小写
3、函数名小写
4、用英文名字,并体现出实际作用

----------------------------------------------------

关键字,不能?作变量

[[email protected] ~]# type while
while is a shell keyword

统?命名规则: 

forName
FOR_NAME

局部变量
变量赋值:name=‘value’
可以使用引用value
(1) 可以是直接字串:name=“root"
(2) 变量引用:name="$USER"
(3) 命令引用:name=`COMMAND`
name=$(COMMAND)
变量引用:$name 或者 $name
" " 弱引用,其中的变量引用会被替换为变量值
‘ ‘ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name

---------------------------------------

变量的定义和读取$

[[email protected] ~]# NAME=CHEN
[[email protected] ~]# echo $NAME
CHEN
[[email protected] ~]# echo "$NAME"
CHEN
[[email protected] ~]# echo ‘$NAME‘
$NAME

--------------------------------------------------

单引号、双引号、反向单引号区别:

1、由单引号(‘),强引用,其中的变量会被替换未变量值。
2、由双引号("),弱引用,其中的变量不会被替换未变量值,而保持原字符串。
3、反向单引号(`)括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准
输出结果取代整个反引号(包括两个反引号)部分。

----------------------------------------------------------------------

多个变量的定义和读取$

[[email protected] ~]# g1=duan

[[email protected] ~]# g2=zhao
[[email protected] ~]# echo $g1$g2
duanzhao

区别变量名和变量,?{}或"分隔。

[[email protected] ~]# num=1
[[email protected] ~]# echo No$num
No1
[[email protected] ~]# echo $numNo
[[email protected] ~]# echo $numNo
1No
[[email protected] ~]# echo $num
1
[[email protected] ~]# echo $"num"No
numNo
[[email protected] ~]# echo "$num"No
1No

----------------------------------------

变量赋值,m指向新的赋值,n不变
[[email protected] ~]# m=10
[[email protected] ~]# n=$m
[[email protected] ~]# echo $m
10
[[email protected] ~]# echo $n
10
[[email protected] ~]# m=20
[[email protected] ~]# echo $m
20
[[email protected] ~]# echo $n
10
?定义变量

[[email protected] data]# name=zhang

[[email protected] ~]# unset name 删除变量

?进程不能使??进程定义的普通变量

[[email protected] ~]# name=zhang
[[email protected] ~]# echo $name
zhang
[[email protected] ~]# bash 开启子进程
[[email protected] ~]# $name
[[email protected] ~]# exit 退出子进程
exit

-------------------------------------------------

?定义环境变量,?进程的变量可以传给?进程

[email protected] ~]# VAR=test
[[email protected] ~]# export VAR 自定义环境变量
[[email protected] ~]# echo $VAR
test

[[email protected] ~]# bash 开启子进程
[[email protected] ~]# echo $VAR 父进程的变量可以传给子进程。
test
[[email protected] ~]# exit 退出子进程
exit

"( )"开启?进程

[[email protected] data]# (name=wei;echo $name)
wei

[[email protected] data]# echo $name

[[email protected] data]# name=wei;(name=li;echo $name);echo $name 

li
wei

---------------------------------------------------------------

只读变量:
只读变量:只能声明,但不能修改和删除
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly -p

-----------------------------

位置变量:
位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ... 对应第1、第2等参数,shift [n]换位置
$0 命令本身
$* 传递给脚本的所有参数,全部参数合为一个字符串
[email protected] 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
注意:[email protected] $* 只在被双引号包起来的时候才会有差异
set -- 清空所有位置变量

位置变量脚本。
[[email protected] data]# vim arg.sh
echo "1st arg is $1"
echo "2st arg is $2"
echo "3st arg is $3"
echo "10st arg is $10"
echo "all args are $*"
echo "all args are [email protected]"
echo "arg number is $#"
echo "scriptname is `basename $0`"

[[email protected] data]# bash arg.sh a b c d
1st arg is a
2st arg is b
3st arg is c
10st arg is
all args are a b c d
all args are a b c d
arg number is 4
scriptname is arg.sh

 

linuxshell编程参考大全(代码片段)

  本文记录LinuxShell编程中常用基本知识,方便快速入门以及查询使用。  本文主要分为以下几个部分:一、Shell中的变量  任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识。0... 查看详情

linuxshell编程参考大全(代码片段)

  本文记录LinuxShell编程中常用基本知识,方便快速入门以及查询使用。  本文主要分为以下几个部分:一、Shell中的变量  任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识。0... 查看详情

《linuxshell命令行及脚本编程实例详解刘艳涛》高清pdf下载链接

 《Linuxshell命令行及脚本编程实例详解刘艳涛》高清pdf下载链接百度网盘链接:https://pan.baidu.com/s/14EVqLqmm5R50Yr0Krpo0Pw提取码:qg4r下载链接2:http://ziliaoshare.cn/Download/p_LSMLHJJBBCSLXJ_lyt.zip     《Linux典藏大系:Linu... 查看详情

linuxshell脚本执行命令详解

...ll脚本,那么应该使用那个命令呢?下面由我为大家整理了linuxshell脚本执行命令的相关知识,希望对大家有帮助!  linuxshell脚本执行  linuxshell脚本执行方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:... 查看详情

linuxshell脚本进阶使用

shell的循环控制语句-continue:提前结束某次循环,重新开始下一次-break:提前结束某层循环范例:#求100以内的奇数和#!/bin/bashsum=0foriin`seq100`;doif[$[i%2]-ne0];thencontinueel 查看详情

linuxshell-脚本中自动确认需要输入确认的命令(代码片段)

文章目录LinuxShell-脚本中自动确认需要输入确认的命令1、yum命令2、其它命令LinuxShell-脚本中自动确认需要输入确认的命令1、yum命令通过指定-y参数即可yum-yinstallxxx2、其它命令echoy|执行的命令 查看详情

linuxshell编程(代码片段)

linuxshell编程1.shell脚本概述2.脚本的调用形式3.shell脚本语法3.1脚本开头标识3.2脚本注释3.3给脚本加上可执行权限3.4shell脚本的运行方式3.5检测脚本是否正确3.6重定向的使用3.7获取上一条命令的执行结果4.变量4.1变量的定义和使用4.2... 查看详情

linuxshell脚本基本语法(代码片段)

文章目录判断文件类型的脚本判断符号[]带参数脚本条件判断ififif判断式case...esac判断循环whilewhilewhileforforforfunction函数一些简单的例子判断网段下哪些主机是开着的输入一个路径,判断该路径下所有文件的权限判断文件类型的脚... 查看详情

linuxshell脚本基本语法(代码片段)

文章目录判断文件类型的脚本判断符号[]带参数脚本条件判断ififif判断式case...esac判断循环whilewhilewhileforforforfunction函数一些简单的例子判断网段下哪些主机是开着的输入一个路径,判断该路径下所有文件的权限判断文件类型的脚... 查看详情

linuxshell脚本基本语法(代码片段)

文章目录判断文件类型的脚本判断符号[]带参数脚本条件判断ififif判断式case...esac判断循环whilewhilewhileforforforfunction函数一些简单的例子判断网段下哪些主机是开着的输入一个路径,判断该路径下所有文件的权限判断文件类型的脚... 查看详情

php来自php脚本的linuxshell命令(代码片段)

查看详情

linuxshell脚本的10个高频面试问答

...ell脚本的附加内容,在本文中我们将从面试的角度解读与LinuxShell相关的问题。1.在shell脚本成功执行前,如何中断脚本执行?解答:我们需要使用​​exit​​命令来实现以上描述的情境 查看详情

linuxshell怎么写

在进行linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入./smartzip就能运行脚本了。。每行命令开头处不用就空格也行。。第1部分.Linux脚本编... 查看详情

linuxshell脚本执行的过程是怎样的?

Linux下可以有两种方式执行Shell脚本:1、用shell程序执行脚本:根据shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第一行#!/bin/bash里面指明了shell类型的,比如#!/bin/bash指明是bash,#!/bin/sh则是sh);然后输入命... 查看详情

linuxshell获得当前目录、上级目录、目录的最后部分

参考技术ALinuxshell获得当前目录、上级目录、目录的最后部分|CSDN脚本调用脚本调用脚本调用脚本调用 查看详情

linuxshell脚本读取用户输入的参数如何解决?

实现需求:shell脚本启动后,用户输入参数,点回车后屏幕上打印出该参数。然后用户接着还可以再输入,再点回车后屏幕上打印出该参数。这样循环下去,除非用户按ctrl+C退出。参考技术Awhilereadvardoecho$vardone这样也是可以的,... 查看详情

linuxshell查找出运行该脚本的用户

需要空格,tab,新行以顺序排列,放置编辑器出现关于space-tab兼容性问题。如果调用_AS_PATH_WALK时IFS没有设置,将会通过将IFS设置为空值,关闭wordsplitting。1as_nl=23IFS="""$as_nl"查找出运行该脚本的用户#Findwhoweare.Lookinthepathifwecontainnod... 查看详情

linuxshell脚本如何启动一个java进程

在shell里面直接调用即可。    1,编译一个java文件为a.class。    2,编写shell脚本b.sh。#!/bin/bashjava a.class    3,放在同一目录下运行shell即可。如果要后台运行,bashb.sh&参考技术A在shel... 查看详情