Linux shell编程基础笔记

1.shell变量
本地变量:
a=1    (等号两边不能出现空格)
只读变量:
readonly
变量名=变量值  
 (在使用过程中不能更改)
声明变量:
linux给变量赋值时默认是字符或字符串型,如果需要数值运算,需要事先声明
declare
参数 变量名[=变量值]
declare的参数: -a:数组 -i:整型 -r:只读
设置整型变量,除了用declare
-i声明以外,还可以:
a=$(($a+1)) or a=$[a+1]
清除变量:
unset
变量名(只读变量无法清除)

访问shell变量:
set 显示所有的本地定义的shell变量
${a} 取变量a的值
echo
显示变量
echo的参数:
无 不加参数打印完转换到下一行
-n
打印完不转换到下一行

从键盘读入为变量赋值:
read [参数] 变量名
read 变量名 变量名 变量名
...
如果不跟变量名,则输入会赋给$REPLY
read参数:
-a 表示把输入存入数组变量名
-p
在赋值之前先显示-p后的提示字符串,如read -p"?" a
显示:?input

环境变量:
导出环境变量(可供外部调用):
export
变量名

位置参数变量:
当脚本被调用时用来保存脚本的命令行参数
echo
${1},${2},...
位置参数移位:
shift [前移量],默认前移1
如:
shift 2  
   
 向左移动两位,通常用在循环结构中

特殊变量:
$0:存放当前执行的脚本文件名,包括路径
$#:存放传递给脚本的位置参数的个数
$*:存放所有传递给脚本的参数
[email protected]:和$*一样,但是每一个参数都用引号引起来
$$:存放当前的进程号
$!:存放后台运行的最后一个进程的进程号
$?:存放最后一个执行完的脚本或命令的退出状态
0表示成功,非0表示有错误

引用:
双引号:弱引用,对 $,`,\
无效
单引号:强引用,任意特殊字符均被屏蔽
反斜线:转义

变量替换:
${varname:-word}  
 若varname未定义或空则用word代替varname作为返回值
${varname:=word}  
 若varname未定义或空则将word赋值给varname再返回
${varname:?message}  
 若varname未定义或空则将message作为错误信息输出
${varname:+word}  
 若varname已定义且不为空则用word作为返回值
${varname:offset}  
 将$varname中第offset个字符开始到结尾的字符串返回,取尾串
${varname:offset:length}将$varname中第offset个字符开始,长度为length的字符串返回,取子串

2.流程控制
顺序结构:
nothing to
say

条件测试:
test命令
检查文件状态,判断字符串是否匹配,数值测试等操作
既可以用在分支结构中,又,可以用在循环结构中
test
测试条件

[ 测试条件 ](测试条件与左右方括号之间需要有一个空格)

文件测试
test [测试条件]
FILE

-e 如果FILE存在
-s 如果FILE非空
-d 如果FILE是目录
-f 如果FILE是普通文件
-b
如果FILE是块设备文件
-c 如果FILE是字符设备文件
-S 如果FILE是套接字文件
-L 如果FILE是符号连接文件
-p
如果FILE是有名管道

-f 如果FILE具有读权限
-w 如果FILE具有写权限
-x 如果FILE具有执行权限
-G
如果FILE是被有效的组拥有
-O 如果FILE是被有效的用户所拥有
-k 如果FILE设置了sticky位
-u
如果FILE设置了set-user-id位
-g 如果FILE设置了set-group-id位
-N
如果FILE自上次访问以来被修改过

FILE1 -nt FILE2 如果FILE1比FILE2新
FILE1 -ot FILE2
如果FILE1比FILE2旧
FILE1 -ef FILE2
如果FILE1是FILE2的硬连接文件,二者指向同一个i节点

字符串测试
string1 = string2  
 字符串相等
string1 != string2    字符串不相等
-n
string1        字符串非空
-z string1  
     字符串为空

数值测试
expr1 -eq expr2  
     表达式值相等
expr1 -ne expr2  
     表达式值不相等
expr1 -gt expr2  
     表达式1大于表达式2
expr1 -lt expr2  
     表达式1小于表达式2
expr1 -ge expr2  
     表达式1大于等于表达式2
expr1 -le expr2  
     表达式1小于等于表达式2

逻辑操作符
与 -a    [
$a = "a" -a $b = "b" ]  
 if($a=="a"&&$b=="b")    
或 -o  
 [ $a = "a" -o $b = "b" ]    if($a=="a"||$b=="b")

!    [ ! a="a" ]      
   
 if($a!="a")

分支结构:(if分支,case分支)
if分支结构:
if
条件测试1;then
 条件测试1为真时的语句
[elif
条件测试2;then]
 条件测试2为真时的语句
...
[else]
 条件测试为假时的语句序列
fi
#如果条件测试语句与then在一行,那么要用;与then分隔开
#条件测试语句与if,elif,else,then之间至少要有一个空格分开
#elif,else可选,else只可出现一次
#if可以嵌套

case分支结构:
case
值 in
 模式1)
  语句组1
   ...
 
;;
 模式2)
  语句组2
   ...
  ;;
 
......
 *)
   语句组n
esac

循环结构
for循环:
for
变量 in 值1 值2 ...
值n
do
 语句1
 语句2
 ...
done

与c语言相似的格式
for((i=1;i<=6;i++))
do
 ...
done

while循环:
while
条件
do
 语句1
 语句2
 ...
done

select循环:
select
name in [ in list ]
do
 语句列表
done

3.shell函数
函数的定义:
function funcname
{
 shell
commands
}
or
funcname()
{
 shell
commands
}

参数的传递:
与脚本的参数相似,使用$1,$2...


#!/bin/bash
my_func()
{
 a=$1
 echo
$a
}

read input
my_func()
$input

函数的返回可以使用:
return

时间: 2024-08-07 18:59:06

Linux shell编程基础笔记的相关文章

Linux Shell编程基础

在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐藏  -R 显示文件夹内的内容  -c 按照最后一次修改时间排序  -t 按照修改时间排序输出 echo 显示  -n 不换行 touch  创建一个文件,或者修改文件的访问时间和修改时间 touch -a file 只更改访问时间 -m之更改修改实际那 -t指定特定时间 cp  复制文件 -a 保

Linux Shell编程基础---国际象棋棋盘

这两天在学习一些shell编程的知识,在做到一道国际象棋的题目时,觉得有些意思,就将它写成博客. 先来看看国际象棋棋盘长啥样: 仔细想了会棋盘的分布规则,这个问题肯定有很多思路,我自己想到的是规则是1.将棋盘行数作为一个大循环,循环8次,每次循环根据行号的奇偶来确定格子颜色的次序:2.在单个行中,循环8次并判断列的奇偶数来确定打印颜色以上思路能够打印出最简单的棋盘,但是shell中一个空格的显示形状并非正方形,而且是空格的高度大于宽度.因此需要在单个棋盘的行的打印循环外在加一层控制打印空格行数的

linux shell编程入门笔记

shell编程的重要性: 对于hadoop程序员,通常需要熟悉shell编程,因为shell可以非常方便的运行程序代码. shell文件格式: 文件名后缀通常是.sh #!/bin/sh[先指定文件下面用的是哪一个sh] #这里是注释 shell中的变量: (1)变量不需要声明,初始化不需要指定类型 (2)变量名称只能有字母.数字.下划线组成,不能使用数字开头 (3)分类: 临时变量 环境变量 (export) 显示变量值使用echo命令 ,加上变量名对于变量引用,也可以使用{变量名} 示例程序

Linux Shell编程学习笔记一:shell简介

Q:什么是Shell,什么是shell脚本? A:Shell是一种用C语言编写的程序,它是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.它是命令语言.命令解释程序及程序设计语言的统称.它的作用就是遵循一定的语法将输入的命令加以解释并传给系统. 命令解释程序:shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用.用户在提示符下输入的命令都由shell先解释然后传给Linux核心.

Linux shell 编程学习笔记--第一章

1.内核从开机自检就放在计算机内存,直到计算机关闭为止,应用程序是放在计算机硬盘的,需要时才调入内存执行. 2.shell就是应用程序,它是连接内核和用户程序的桥梁.用户登入Linux系统的时候,shell就会被调入内存执行.shell图的关系..缺 3.用户有两种方式打开shell(1)通过图形界面的方式,来操作Linux操作系统 (2)两个软件,远程登录.其中登录要输入的IP没太明白,输入谁的IP 4.脚本语言和编译型语言的区别和联系.脚本语言易学难精. 1.3.1 shell脚本的基本元素

Linux shell编程学习笔记---第三章

3.1正则表达式基础 正则表达式的主要功能是文本查询和字符串操作.实际上就是字符串过滤. 正则表达式包括普通字符和元字符,元字符主要的,见书中50页描述.特殊的正则表达式^$匹配空行. 正则表达式的扩展 bash shell中的通配,和原来的字符含义完全不一样了..对比区别 3.4grep命令,强大的文本搜索工具

linux——shell编程基础

编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不应事先声明.数据运算时会自动转换数据类型. 变量 变量命名规则: 变量由字母.数字.下划线组成. 不能有数字开头 变量类型:本地变量.环境变量.局部变量.特殊变量(内置).参数变量.只读变量. 注意如果变量没有定义在shell的配置文件,那么他的生命周期只是当前shell进程,一退出就失效. 作用域示

[Linux]shell编程基础/linux基础入门

声明执行程序 #!/bin/bash 用来告诉系统使用/bin/bash 程序来执行该脚本.譬如python 脚本,可以这样写: #!/usr/bin/python 赋值和引用 赋值公式: 变量名=值 取一个变量的值的时候,需要在变量名前面加上$ 符号,譬如: var="hello bash" echo $var 如果出现拼接,而且又没有空格为分隔符,这个时候就需要使用大括号将变量括住,如: num=3 echo "this is the ${num}th" 其输出

Linux shell编程 基础正则表达式