脚 本

1.创建脚本

#!/bin/bash  ##脚本第一行,用/bin/bash执行

echo "hello world"   ##执行的命令

* /usr/local/bin  本地开发、系统上的其他人使用的脚本

* /usr/local/sbin  本地开发、由root使用的脚本

2.脚本的执行和调试

3.引用和转义

*  在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致 按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。

echo "can i have a $FRUIT"

*  弱引用,将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量扩展和命令扩展在双引号内仍起作用。

echo ‘can i have a $FRUIT‘

*  强引用,将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展

*  转义,非引用的\是转义字符。它保留了下一个字符的文字值。

4.shell变量

*  用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本

FITST=jhon  ##定义变量

echo ${FIRST}_$LAST   ##使用变量

5.命令替换

*  在子shell中执行指定命令并用命令输出替换脚本中的命令替换。

6.算术运算符

*  可以在程序中实现加、减、乘、除等数学运算的运算符。

-     减法

+     加法

**    幂运算

*     乘法

/     除法

%     余数

i++    增量后

i--    减量后

+=     加等

-=     减等

## 脚本内容表示从1到10之和

运行结果

7.for循环

*  用于值列表中的相同命令的重复。

##  (seq 2 2 8)表示从2到8隔两个数取数

8.循环与计算结合

** 表示从1加到99的总和

结果

9.数据库备份示例

#!/bin/bash

for DB in $(mysql -uroot -p123 -e "show databases;" -E -N | grep -v ‘^*‘ | grep -v    ‘schema$‘)    //过滤要备份的数据库

do

echo "Backup $DB"     //显示Backup 库名

mysqldump $DB > /dbbackup/$DB.dump    //备份数据库到dbbackup目录

done

echo "OK"      //备份完成后显示OK

for DBDUMP in /dbbackup/*    //从dbbackup目录中过滤库名

do

SIZE=$(stat --printf "%s\n" $DBDUMP)   //统计备份文件大小

echo "$DBDUMP $SIZE"   //显示库名和大小

done

10.位置参数

* 使用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量,为交互式输入

测试

* 使用位置参数来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号。

指定的位置参数总数:$#

位置参数自身:$0、$1、$2、$3....

所有位置参数: [email protected]、$*

测试

11.退出状态

*  Linux命令完成时,将返回退出状态。成功完成程序时,将返回0的推出状态。这被bash当作逻辑True值。非零退出状态通常表示发生了错误,并且被bash当作逻辑False值。

echo $?  ##退出状态的值被存储在"?"中,查看退出状态

*  退出状态数字的含义

0    ##在指定的文件中找到了模式

1    ##在指定的文件中未找到模式

>1    ##一些其他错误(无法打开文件、错误的搜索表达式等)

12.test条件判断

*  test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语法,使用方括号"[]"将表达式括起来,这样更易于阅读。

*  非零或零长度字符串运算符

[ -n westos];echo $?   ##判断不是非零字符,也可写为test -n westos;echo $?

[ -z westos];echo $?   ##判断是非零字符

*  字符串比较运算符

=    ##等于字符

!=    ##不等于字符

*  数字比较运算符

-eq    等于

-ne           不等于

-lt    小于

-le   小于等于

-gt          大于

-ge         大于大于

*  文件状态运算符

测试

-b    ##块设备文件

-c    ##字符设备文件

-e    ##文件是否存在

-f    ##是否是常规文件

-d    ##是否是目录

-S    ##套接字文件

-L    ##是否是链接

*  二进制文件运算符

-ef    ##两文件是否相同

-nt    ##第一个文件是否比第二个新

-ot    ##第一个文件是否比第二个旧

*  逻辑运算符

-a    ##并且,两个条件同时满足

-o    ##或者,两个条件最少满足任意一个

!    ##给结果取反

&&    ##结果正确执行

||    ##结果不正确执行

13.if语句

*  if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之间的命令列表(反向平写if,标记if块的结束)。

#!/bin/bash

if

[ -z "$1" ]     //脚本后没跟文件

then

echo please give me file   //显示please give me file

elif

[ ! -e "$1" ]       //如果脚本后跟的文件不存在

then

echo "$1 is not exist"    //显示文件is not exist

else

for NAME in `cat $1`       //从文件中过滤NAME

do

USER=`getent passwd $NAME`   //检测用户是否存在

if

[ -z "$USER" ]     //如果用户不存在

then

useradd $NAME    //添加用户

echo wsetos | passwd --stdin $NAME   //并设置密码

else

echo $NAME is exist      //显示用户存在

fi

done

fi      //结束

*  测试

14.case语句

*  它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。esac标记结束

#!/bin/bash

case "$2" in

+)    //第二个变量为+

echo num=$[ $1 + $3 ]   //输出$1 + $3的值

;;

-)    //第二个变量为-

echo num=$[ $1 - $3 ]   //输出$1 - $3的值

;;

%)    //第二个变量为%

echo num=$[ $1 * $3 ]   //输出$1 % $3的值

;;

/)   //第二个变量为/

echo num=$[ $1 / $3 ]   //输出$1 / $3的值

;;

*)     //第二个变量为其他

echo   "please input right command"   //输出please input right command

;;

esac

*  测试

15.expect语句

*  实现自动应答脚本。

交互输入脚本

## 使用expect脚本之前要yum install expect -y

expect脚本

#!/user/bin/expect    //告诉操作系统脚本里的代码使用那一个shell来执行。

set timeout 10       //设置后面所有的expect命令的等待响应的超时时间,单位为秒

spawn /mnt/ask.sh  //spawn是expect的内部命令,作用是给后面的shell指令加个壳,用来传递交互指令。

expect "who"    //判断上次输出结果里是否包含“who”的字符串,如果有则立即返回,否则等待超时时间后返回。

send "haha\r"   //执行交互动作,相当于手工输入"westos"。

expect "old"

send "13\r"

expect "happy"

send "happy\r"

expect eof    //作用是在输出中搜索文件结束符,如果没有这一行,脚本会立即退出,得不到正确结果。

## interact表示执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录。

*  测试

16.环境变量

*  shell和脚本使用变量来存储数据 ,有些变量可以连同它们的内容传递给子进程,这些变量我们称之为环境变量,分为三种

(1) 临时设置,换了shell后不存在

(2) 用户级别设置,相对应的用户一直生效,切换用户后不生效

修改~./bash_profile文件

* 测试

(3)系统级别修改,切换用户后也会生效

修改/etc/profile文件

* 测试

(4) env  ##查看环境变量

17.别名

*  自定义属于自己的系统命令。

(1) 临时生效

alias xie = ‘vim‘   ##临时设置别名

alias     ##查看别名

(2)  永久生效

修改~./ bashrc文件

* 测试

source  ./ bashrc  ##文件生效

(3) 删除别名

unalias  xie

18.函数

#!/bin/bash

ACTION () {     //设置函数

if [ $2 $1 ];then   //判断条件

echo "$1 is $3"

fi

}

ACTION $1  "! -e" ‘not exist’  //使用函数

ACTION $1  "-b" ‘not exist’

ACTION $1  "-f" ‘not exist’

ACTION $1  "-L" ‘not exist’

ACTION $1  "-d" ‘not exist’

ACTION $1  "-c" ‘not exist’

ACTION $1  "-s" ‘not exist’

时间: 2024-11-03 22:15:52

脚 本的相关文章

没有比脚更长的路 没有比人更高的山

山高路远 ---------汪国真 呼喊是爆发的沉默 沉默是无声的召唤 不论激越 还是宁静 我祈求 只要不是平淡 如果远方呼喊我 我就走向远方 如果搭讪召唤我 我就走向大山 双脚磨破 干脆再让夕阳涂抹小路 双手划烂 索性就让荆刺变成杜鹃 没有比脚更长的路 没有比人更高的山

Java 脚本化编程指南

译文出处: coyee   原文出处:docs.oracle Java脚本化API为谁准备? 脚本语言的一些有用的特性是: 方便:大多数脚本语言都是动态类型的.您通常可以创建新的变量,而不声明变量类型,并且您可以重用变量来存储不同类型的对象.此外,脚本语言往往会自动执行许多类型的转换,例如, 必要时 将数字10转换为"10". 开发快速原型:您可以避免编辑编译运行周期,只使用"编辑运行"! 应用扩展/定制:你可以"具体化"的部分应用程序,例如一些

已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只

描述    已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只, 如果无法组成    输入    h(0<h<2147483647)    f(0<f<2147483647)    输出    鸡的数目    兔子的数目 public class Main {     public static void main(String[] args){         int h = 0;         int f = 0;         Scanner scanner = new S

FPGA学习记录 - Quartus II 未使用管脚设置为三态输入

未使用管脚设置为三态输入 Assignments  -> Device 或双击器件 Device and Pin Options

diamond版本区别之管脚定义----lattice开发平台

对于多位宽的数据线,在diamond xxx之前,管脚绑定格式是(假如数据是input wire[1:0] din) LOCATE COMP "din_0" SITE "P16" ;LOCATE COMP "din_1" SITE "P15" ;/*******这种格式是不是很变态,和altera.xilinx都不一样,对于刚接触lattice开发平台的人来说绝对是一个坑*******/ diamond3.7,管脚绑定格式是

使用tcl文件分配管脚

之前在进行简单的设计的时候,分配管脚比较少,就用的pin planner一个一个输入.现在在做一个大的系统,这样做就太麻烦,在网上搜到了用tcl文件分配管脚的方法. 步骤如下: 首先生成tcl文件,具体做法是project--Generate Tcl Files for project,注意不要勾选include default assignments选项,第一次勾选了之后,提示错误. 然后在文件中间按照下面的格式对管脚进行分配即可. set_location_assignment PIN_N8

纂篆我跟你不合适就像37码的鞋碰上了42码的脚一样不合适不怪鞋也不怪脚

赘专注左拙桩撞兹阻 我跟你不合适就像37码的鞋碰上了42码的脚一样不合适不怪鞋也不怪脚.. http://passport.baidu.com/?business&un=vip&un=%5F%E6%B8%85%E6%B5%A6%E6%8C%89%E6%91%A9%E7%BE%8E%E5%A5%B3%5F#0 http://passport.baidu.com/?business&un=vip&un=%5F%E8%BF%9E%E4%BA%91%E6%8C%89%E6%91%A

CSS + DIV 让页脚始终底部

一 前言 经常设计页面时用到三层DIV,头DIV与脚DIV一般固定高度,而中间层DIV根据内容的多少,高度不定,我们经常希望但内容很少时,脚DIV保持在底部,当内容很多时,脚DIV被中间内容挤到下面,但仍然始终保持在底部. 二 position position有四个参数:static  | relative | absolute | fixed position:static,意味元素没有被定位,元素会出现在文档本该出现位置,是页面元素默认的定位的方式,一般无需指定,除非想要覆盖之前设置的定位

耳机接口pin脚定义

耳机有两种标准: 国标L R MIC GND 欧标:L R GND MIC 测量方法:左声道或者右声道  与另外pin脚间电阻有30欧姆左右说明是测量pin脚是GND:

锤子:如何不再砸自己的脚

靠着一把铁锤砸烂了西门子,老罗的情怀砸进了众多消费者的心里,他的锤子手机也伴随着情怀拿到了足量的订单.而近日,罗永浩和他的锤子手机再一次聚焦了全民的视线,不过这次,他挥舞的锤子却是砸在了自己的脚上,虽然暂不致命,但至少会疼上好一阵子. 锤子砸脚1.0: 富士康考问生产能力 "过去的十来天,可能是锤子科技创立以来最艰难的十来天,我们的产能比计划中的最坏结果还要差."罗永浩与他的锤子在微博上称,目前锤子在"产线欠磨合"."工人装配操作不熟练". &q