Linux-Shell脚本(1)

shell script介绍

1、shell script

1.1、定义

  • 其实就是纯文本文件,以固定的语法组织起来。
  • 可以编辑这个文件, 让这个文件帮我们 一次执行多个命令。
  • 可以通过一些运算与逻辑判断来帮我们达成某些较复杂的功能。

1.2、运行方式

shell.sh文件必须具备可读与可执行 (rx) 的权限

  • 直接执行:
    • 绝对路径:运行文件所在的绝对路径来执行指令,如/home/zkpk/apps/shell.sh
    • 相对路径:cd到脚本所在目录 ,使用 ./shell.sh 执行
  • bash执行:
    • bash shell.sh
    • sh shell.sh
  • source 执行
    • source shell.sh

1.3、脚本基本格式

#!/bin/bash
# Shows "Hello World!" in your screen.
echo -e "Hello World! \a \n"
exit 0

第一行:基本格式,告知系统执行方式,当采用非sh XXX.sh格式执行时,此行必须。

第二行:注释,#开头,后面的文字内容不参与程序执行。

第三行:基本的输出语句。在屏幕打印"Hello World!"。

第四行:脚本执行完毕的返回语句。可以使用echo $?来获取执行后返回值。

1.4、数值运算

格式:$((运算主体))

实例(乘法运算):

#!/bin/bash
echo -e "Input 2 numbers, I will cross them! \n"
read -p "first number: " firstnu               #键盘录入数字,存到firstnu中
read -p "second number: " secnu                #键盘录入数字2,存到secnu中
total=$(($firstnu*$secnu))                     #进行运算
echo -e "\nThe result of $firstnu x $secnu is ==> $total"        #输出结果

第四行$(($firstnu$secnu)) 为双重括号,若删去一层则以字符串进行运算

1.5、test判断命令

使用范例:test -e demo.txt

  • 判断某个文件类型
    • -e 该文件是否存在
    • -f 该文件是否存在且为文件(file)
    • -d 该文件名是否存在且为目录(directory)
    • -b 该文件是否存在且为一个 block device 装置
    • -c 该文件是否存在且为一个 character device 装置
    • -S 该文件是否存在且为一个 Socket 文件
    • -p 该文件是否存在且为一个 FIFO (pipe) 文件
    • -L 该文件是否存在且为一个连接文件
  • 判断文件权限
    • -r 检查该文件是否存在且具有可读的权限
    • -w 检查该文件是否存在且具有可写的权限
    • -x 检查该文件是否存在且具有可执行的权限
    • -u 检查该文件名是否存在且具有SUID的属性
    • -g 检查该文件名是否存在且具有SGID的属性
    • -k 检查该文件名是否存在且具有Sticky bit的属性
    • -s 检查该文件是否存在且为非空文件
  • 两个文件之间比较
    • -nt 判断file1 是否比 file2 新
    • -ot 判断file1 是否比 file2 旧
    • -ef 判断两个文件是否为同一个文件
  • 整数之间的判断
    • -eq 两数值相等(equal)
    • -ne 两数值不等(not equal)
    • -gt n1大于n2(greater than)
    • -lt n1小于n2(less than)
    • -ge n1大于等于n2(greater than or equal)
    • -le n1小于等于n2(less than or equal)
  • 判断字符串
    • test -z string 判断字符串是否为空?若 string 为空字符串,则为 true
    • test -n string 判断字符串是否非空?若 string 为空字符串,则为 false
    • test str1 = str2 判断str1是否等于str2,若相等,则返回 true
    • test str1 != str2 判断str1是否不等于str2,若相等,则返回 false

实例(判断文件类型,显示其权限):

#!/bin/bash
# Program:
# User input a filename, program will check
# 1. 输入文件名,并判断输入存在
echo -e "Please input a filename, I will check the filename's type and \ permission. \n\n"
read -p "Input a filename : " filename
test -z $filename && echo "You MUST input a filename." && exit 0
# 2. 判断文件是否存在?不存在结束脚本
test ! -e $filename && echo "The filename '$filename' DO NOT exist" && exit 0
# 3. 判断文件类型及属性
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 4. 显示文件信息
echo "The filename: $filename is a $filetype"
echo "And the permissions are : $perm"

1.6、判断符号[]

  • [ 判断条件 ] 两端留有空格

“-o”表示两者条件满足其一即可

“-a”表示两者都得满足。

实例:

#!/bin/bash
#This program shows the user's choice
read -p "Please input (Y/N): " temp
[ "$temp" == "Y" -o "$temp" == "y" ] && echo "OK, continue" && exit 0

2、shell script参数

2.1、shell script 默认参数

如:调用语句如下

./shell.sh con1 con2 con3 con4
$0为./shell.sh  $1为con1  $2为con2  $3为con3 $4位con4

实例:

#!/bin/bash
echo "The script name is ==> $0"
echo "Total parameter number is ==> $#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2.Stop here." && exit 0
echo "Your whole parameter is ==> '$@'"
echo "The 1st parameter ==> $1"
echo "The 2nd parameter ==> $2"

运行界面:

[zkpk@node05 test_linux]$ ./p4.sh 1 2
The script name is ==> ./p4.sh
Total parameter number is ==> 2
Your whole parameter is ==> '1 2'
The 1st parameter ==> 1
The 2nd parameter ==> 2

2.2、参数偏移shift

实例解释:

./p5.sh one two three four five six
#!/bin/bash
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
#shift一个变量
shift
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift 3 #shift三个变量
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"

运行结果:

[zkpk@node05 test_linux]$ ./p5.sh one two three four five six
Total parameter number is ==> 6
Your whole parameter is ==> 'one two three four five six'
Total parameter number is ==> 5
Your whole parameter is ==> 'two three four five six'
Total parameter number is ==> 2
Your whole parameter is ==> 'five six'

使用shift后,变量位置发生偏移,在第一次shift一个变量后,变量$1从one变成了two。以此类推。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 1.Linux下如何用命令查看实时日志(完整命令) tail -f 路径.log查看前多少行 tai-200f 路...
    qianyewhy阅读 2,251评论 0 11
  • Shell script学习总结 shell script注意事项 命令的执行顺序 从上至下,从左至右 命令的执行...
    DorisSunny阅读 234评论 0 1
  • 1.建立和运行shell程序 什么是shell程序呢? 简单的说shell程序就是一个包含若干行shell或者li...
    运维阿文阅读 1,476评论 0 9
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,054评论 1 19
  • 如何判断两条线是否相交呢?demo下载 其实我也不懂这个判断是什么意思,直接从网上拿过来用了,判断方法是用C++写...
    小沫360阅读 3,186评论 0 3