Shell编程

一、Shell的HelloWorld

#!/bin/bash

echo “HelloWorld!”

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

运行方法有两种:

./helloworld.sh

/bin/sh helloworld.sh(这种运行方式是作为解释器的参数,.sh文件第一行不需要#!)

 二、Shell的变量

1.定义变量

变量名和等号之间不能有空格;

命名只能使用字母数字下划线,且不能以数字开头;

中间不能有空格;

不能使用标点符号;

不能使用bash里的关键字。

2.使用变量  使用一个定义过的变量,${变量名} 即可({}是为了帮解释器识别变量边界)

3.只读变量 使用readonly命令将变量定义为只读,只读变量的值不可更改

4.删除变量  unset

5.shell的字符串  可以用单引号,也可以用双引号,也可以不用引号

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号里可以有变量;双引号里可以出现转义字符。

${#变量名}可以获取字符串长度;

${变量名:1:5}从字符串第2个字符开始截取5个字符;

6.Shell中支持一维数组,用括号表示数组,数组元素以空格分割;${数组名[index]}读取数组,${数组名[@]}可以获取数组中所有元素;${数组名[@]}或者${数组名[*]}获取数组中元素个数,${数组名[index]}获取某个元素的长度。

7.shell的注释 #就是注释,没有多行注释。想要注释多行可以用{}定义成一个函数,不调用不执行

三、shell传递参数

./test.sh  a   b   c  

使用$n可以获取到传递的参数,$0为文件名,$1为a,$2为b,$3为c,依次类推…

$# 获取传递的参数个数

$*或者$@ 获取所有参数,$*将所有参数以一个字符串的形式获取到,$@获取每个参数

$$ 后台运行的最后一个进程的ID号

$- 显示Shell使用的当前选项,与set命令功能相同。

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

四、shell的echo和printf命令

输出命令,printf不会自动换行,需要手动添加\n,printf支持格式替代符

 扩展:格式说明符详细说明
① d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据十进制的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
② o格式:以无符号八进制形式输出整数。
%d:按整型数据八进制的实际长度输出。
%lo:对长整型可以用格式输出
%mo:指定字段宽度用格式输出
③ x格式:以无符号十六进制形式输出整数。
%x:按整型数据十六进制的实际长度输出。
%lx:对长整型可以用格式输出
%mx:指定字段宽度用格式输出
④ u格式:以无符号十进制形式输出整数。
%u:按无符号整型数据十进制的实际长度输出。
%lu:对长整型可以用格式输出
%mu:指定字段宽度用格式输出
⑤ c格式:输出一个字符。
⑥ s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串长度大于m,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
⑦ f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧ e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。
此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨ p格式:输出指针地址

五、shell的流程控制

1.if语句
if condition
then
    command1 
    command2
    ...
    commandN 
fi
2.if-else
if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
3.if-else if-else
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
4.for循环
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
5.while循环
while condition
do
    command
done
  while死循环
while :                              while true
do                                   do
    command                              command
done                                 done
6.until循环
until condition
do
    command
done
7.case in
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

六、shell的函数

[ function ] funname [()]{
    action;
     [return int;]
}

可以带function fun() 定义,也可以直接fun() 定义,不带任何参数;

参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

七、shell的重定向

命令

说明

command > file

将输出重定向到 file。

command < file

将输入重定向到 file。

command >> file

将输出以追加的方式重定向到 file。

n > file

将文件描述符为 n 的文件重定向到 file。

n >> file

将文件描述符为 n 的文件以追加的方式重定向到 file。

n >& m

将输出文件 m 和 n 合并。

n <& m

将输入文件 m 和 n 合并。

<< tag

将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

八、shell的文件包含

Shell支持外部脚本,格式为:

. 空格文件名 或者source 文件名

Shell将字符串拆分成数组

fileName="/home/a.txt"

for i in `cat${fileName}`
do
    OLD_IFS="$IFS"
    IFS=","
    arr=($i)
    IFS="$OLD_IFS"
    doCheck ${arr[0]} ${arr[1]} ${arr[2]}
done

arr=($a)用于将字符串$a分割到数组$arr${arr[0]} ${arr[1]} ... 分别存储分割后的数组第1 2 ... 项,${arr[@]}存储整个数组。变量$IFS存储着分隔符,这里我们将其设为逗号 "," OLD_IFS用于备份默认的分隔符,使用完后将之恢复默认。

 Shell逐行读文件的4种方法

1.while循环
function while_read_LINE_bottm(){
While read LINE
do
echo $LINE
done  < $FILENAME
}
2.
Function While_read_LINE(){
cat $FILENAME | while read LINE
do
echo $LINE
done
}
3.for循环
function  for_in_file(){
For  i  in  `cat $FILENAME`
do
echo $i
done
}
4.
Function while_read_line_fd(){
Exec 3<&0
Exec 0<$FILENAME
While read LINE
Do
Echo $LINE
Exec 0<&<3
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值