shell编程

简介:

shell脚本 ,就是一个可执行文件,后缀为.sh,文件中是多条要顺序执行的linux命令。

一,如何写和执行;

二,程序设计相关(注释,变量/字符串,数组,运算符,控制语句,函数);

三,常用命令(输入,输出,文件读写,日期时间);


一,如何写和执行:

1,如何写

vi filename.sh

文件中的linux命令用;号隔开。

2,如何执行

1>直接法:sh filename.sh

2>可执行文件法:

文件开头用 #!/bin/bash 声明使用的linux命令库;

赋予执行权限:chmod a+x filename.sh;

./filename.sh。

3,如何调试

set -x


二,程序设计

1,注释:#

2,变量

1>赋值:name=value

2>调用:$name或${name}

3>环境变量:$PATH,$HOME,$PWD,$USER,$UID,$SHELL

4>预定义变量:$?命令执行后返回的状态,$$当前进程的进程号

5>导出:export name

被导出的变量在当前shell脚本执行的任何程序都会继承这个变量。如添加新路径:export PATH="$PATH:/home/user/bin"


数据类型都为字符串

1>长度:${#name}

2>相连:${name}${age}

3>引号:单引号',双引号",反引号`

单引号中的字符会被解析为字符串;如:name='Jason'。

反引号中的字符会被解析为命令。

双引号中的$会被解析为变量,如:name="${firstName}.${lastName}";

双引号中的`会被解析为命令,如:name="`whoami`"。

4>字符串转数组

string="a c d"

arr=($string)

5>字符串截取

string="http://www.baidu.com/index.html"

截取左边:string=${string#*//}   得到  "www.baidu.com/index.html"

截取右边:string=${string%/*}   得到  "www.baidu.com"


3,数组

1>定义:array_var=(1 2 3 4 5);

2>使用:${array_var[0]}

3>长度:${#array_var[*]}

4>全部:${array_var[*]}

5>添加:array_var=(${array_var[*]} ${newItem})

6>遍历

for((i=0;i<${#array_var[*]};i++))
do
  echo ${array_var[i]};
done

for var in ${array_var[*]}
do
  echo $var;
done


4,运算符

1>整数运算:let,[],(()),expr

no1=4;no2=5;
let result=$no1+$no2
result=$[ $no1 + $no2 ]
result=$(( $no1 + $no2 ))
result=$(expr $no1 + $no2)       #运算符两边要空格!

2>浮点运算:bc

"4*0.56" | bc                    #运算符有:+加,-减,*乘,/除,^指数,%余数,a(x) 正弦,c(x) 余弦

在运算前,可设置参数,用;号隔开。如设置精度:"scale=2;3/8" | bc


5,控制语句

1>条件:if,else

if [ $name = 'admin' ]
then
  echo 'admin';
fi
if [ $name = 'admin' ]
then
  echo 'admin';
else
  echo 'user';
fi
if [ $name = 'admin' ]
then
  echo 'admin';
elif [ $name = 'dba' ]
  echo 'dba';
else
  echo 'user';
fi

test 或 [ ] 支持判断数值、字符和文件

(1)数值测试:

-eq:等于
-ne:不等于
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于
(2)字符串测试:
=:等于
!=:不相等
-z 字符串:字符串长度为零
-n 字符串:字符串长度不为零
(3)文件测试:
-e 文件名:文件存在
-r 文件名:文件存在且可读
-w 文件名:文件存在且可写
-x 文件名:文件存在且可执行
-s 文件名:文件存在且至少有一个字符
-d 文件名:文件存在且为目录
-f 文件名:文件存在且为普通文件
-c 文件名:文件存在且为字符型文件
-b 文件名:文件存在且为块文件
非(”!”)、且(“-a”)、或(“-o")。三个逻辑操作符用于将测试条件连接起来。

注意:[]内侧和符号两边都要空格!!!


2>循环:for,while,until

for:

for((i=0;i<10;i++))
do
 echo $i;
done

while:

i=0;
while(($i<10))
do
 echo $i;
 let i++;
done

until:

i=0;
until(($i==10))
do
 echo $i;
 let i++;
done

跳出循环:break,continue


6,函数

1>定义

function fname(){
statement;
}
2>调用
fname arg1 arg2;

3>参数

$1,$2...

参数个数:$#

全部参数字符串:$*

全部参数数组:$@

4>导出函数:export -f fname

4>返回值

return 返回整数

echo 返回字符串(函数中的命令如grep会影响输出,需要重定向)

4>引用

. ./function


三,常用命令

1,输入

从控制台获取输入 read var

1>密码:read -s var

2>提示:read -p "Enter input:" var

3>限制字符数:read -n 2 var

4>限制时间数:read -t 5 var

5>指定定界符:read -d "," var


2,输出

输出到控制台 echo, printf

1> echo:会自动换行。

2> printf:格式化输出。

%[-][length]type是格式替换符:

type有s,f;替换字符串和浮点数。

length表示显示位数;默认右对齐,添加-则左对齐。

如:printf "%-5s %-4.2f\n" Smith 90.222


3,文件操作

1>按行处理:sed

sed [options] "command" file(s)  

options: -i 则修改源文件;-e则多命令操作

command: 由两部分组成:定位+操作

定位:通过指定行号,正则表达式匹配。

操作:添加a;插入i;删除d;替换c;全文正则表达式替换:s/old/new/g ,\(re\)保存匹配的字符,用数字1使用;


4,日期时间

1>查看时间:date

2>格式查看:年,月,日,星期,时,分,秒

date +%Y %b %d %a %H %M %S

3>修改时间:date --date "Jan 20 2014"

4>UTC时间:date +%s

5>延时执行:sleep 


5,字符串trim

 #trim string
 #arg1 = string
 function trim(){
   echo $1 | sed -e 's/\(^ *\)//' -e 's/\( *$\)//' -e 's/\r//'
 }


6,数组contains

 #array contains() method
 #arg1 = array, arg2 = item
 function contains(){
   array=($@)
   arrayLength=$(( $# - 1 ))
   for((k=0;k<${arrayLength};k++))
   do
     arrayItem=${array[$k]}
     if [ $arrayItem = $2 ]
     then
       echo "true"
       return 0
     fi
   done
   echo "false"
 }

7,判断命令是否成功 

 [ $? -eq "0" ];
    then
      echo "true";
    else
      echo "false";
  fi


资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
资源下载链接为: https://pan.quark.cn/s/dab15056c6a5 Oracle Instant Client是一款轻量级的Oracle数据库连接工具,能够在不安装完整Oracle客户端软件的情况下,为用户提供访问Oracle数据库的能力。以“instantclient-basic-nt-12.1.0.1.0.zip”为例,它是针对Windows(NT)平台的Instant Client基本版本,版本号为12.1.0.1.0,包含连接Oracle数据库所需的基本组件。 Oracle Instant Client主要面向开发人员和系统管理员,适用于数据库查询、应用程序调试、数据迁移等工作。它支持运行SQL*Plus、PL/SQL Developer等管理工具,还能作为ODBC和JDBC驱动的基础,让非Oracle应用连接到Oracle数据库。 安装并解压“instantclient_12_1”后,为了使PL/SQL Developer等应用程序能够使用该客户端,需要进行环境变量配置。设置ORACLE_HOME指向Instant Client的安装目录,如“C:\instantclient_12_1”。添加TNS_ADMIN环境变量,用于存放网络配置文件(如tnsnames.ora)。将Instant Client的bin目录添加到PATH环境变量中,以便系统能够找到oci.dll等关键动态链接库。 oci.dll是OCI(Oracle Call Interface)库的重要组成部分。OCI是Oracle提供的C语言接口,允许开发者直接与数据库交互,执行SQL语句、处理结果集和管理事务等功能。确保系统能够找到oci.dll是连接数据库的关键。 tnsnames.ora是Oracle的网络配置文件,用于定义数据库服务名与网络连接参数的映射关系,包括服务器地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值