源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

linux基础之Shell Script入门介绍

  • 时间:2021-11-24 16:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:linux基础之Shell Script入门介绍
linux基础之Shell Script 1 Shell Scipt 使用指令和基本程序设计结构写成的程序,可以完成复杂的处理流程 1.1 程序书写
[u]复制代码[/u] 代码如下:
#!/bin/bash # Program: #       This program shows "Hello Wrold" in your screen. # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH echo -e "Hello World!\a\n" exit 0
第一行 #!/bin/bash 说明使用的shell类型,不同shell语法可能不同,所以要说明使用的是哪种shell 其它#开始的表示注释,注释一般需要说明 程序功能 版本历史 作者及联系方式 设置好PATH变量,以便直接可以调用相应路径下的命令 程序主体部分 exit 0 表示程序执行成功,向环境返回0 1.2 程序执行 bash $bash sh01.sh #如果用sh sh01.sh而sh又不是指向bash,那么sh01.sh内的语法就会不一致,因为用 #sh去解释了bash语法写的shell script,针对这个程序,如果 #$type sh #得到sh is hashed (/bin/sh) #那么会输出-e Hello world!,而非Hello world!
[u]复制代码[/u] 代码如下:
$./xxx.sh $chmod +x sh01.sh $./sh01.sh source $ source sh01.sh
注:用bash和用source的不同在于,用bash执行时,shell script其实是在在父程序bash下新建了一个 bash子程序,这个子程序中执行,当程序执行完后,shell script里定义的变量都会随子程序的结束而消失, 而用source执行时,是在父程序bash中执行,shell script里定义的变量都还在。 2 简单Shell练习 2.1 例1 接收用户输入
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to read user's input # Site: www.1sucai.cn # 2013/2/3 on_1y First release PATH=$PATH export PATH read -p "Your first name:" firstname # tell user to input read -p "Your last name:" lastname # tell user to input echo -e "\nYour full name: $firstname $lastname" exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh02.sh Your first name:Minix Your last name:007 Your full name: Minix 007
2.2 例2 按日期建立相似名字的文件
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to create files according to date # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH # Get filename from user echo -e "I will use 'touch' to create three files." read -p "Please input your filename:" tmpfilename # Prevent the user input [Enter] # Check whether filename exists or not filename=${tmpfilename:-"filename"} # Get the final filename according to date date1=$(date --date='2 days ago' +%Y%m%d) # date of 2 days ago date2=$(date --date='1 days ago' +%Y%m%d) # date of yesterday date3=$(date +%Y%m%d) # date of today filename1=${filename}${date1} filename2=${filename}${date2} filename3=${filename}${date3} # Create file touch "$filename1" touch "$filename2" touch "$filename3" exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh03.sh I will use 'touch' to create three files. Please input your filename:WhoKnows $ ls W* WhoKnows20130201  WhoKnows20130202  WhoKnows20130203
3 判断式 3.1 测试文件是否存在 test -e filename会根据filename是否存在返回0或1,再交由echo显示结果:
[u]复制代码[/u] 代码如下:
$ test -e sh01.sh  && echo "Exists" || echo "Not exists" Exists $ test -e sh0x.sh  && echo "Exists" || echo "Not exists" Not exists
3.2 test常用选项 3.2.1 文件类型
[u]复制代码[/u] 代码如下:
-e file :file是否存在 -f file :file是否存在且为文件 -d file :file是否存在且为目录
3.2.2 权限 -r file :file是否有读的权限 3.2.3 文件新旧比较 -nt file1 file2 : file1 是否比 file2新 3.2.4 整数,字符串,多重条件判断 -z string: string是否为空 例:输出指定文件类型及属性
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to output type and permission of the target file # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH # Get filename from user echo -e "Input name of the file that you want to check.\n" read -p "Filename:" filename test -z $filename && echo "You must input a filename." && exit 0 # Check whether the file exists or not test ! -e $filename && echo "The file '$filename' DO NOT exists" && exit 0 # Check type and permission of the file test -f $filename && filetype="regular file" test -d $filename && filetype="directory" test -r $filename && perm="readable" test -w $filename && perm="$perm writable" test -x $filename && perm="$perm executable" # Output result echo "The filename:$filename is a $filetype" echo "And Permissions are :$perm" exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh04.sh Input name of the file that you want to check. Filename:sh01.sh The filename:sh01.sh is a regular file And Permissions are :readable writable executable
3.3 使用[]判断 测试文件是否存在
[u]复制代码[/u] 代码如下:
$ [ -e "sh01.sh" ] ; echo $? 0 $ [ -e "sh0x.sh" ] ; echo $? 1
注意[]内空格必须有 这种方法和test的test -e "sho1.sh" ; echo $? 是一致的 4 Shell Script 参数
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to ouput parameter of the shell script # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH echo "The script's name is ==> $0" echo "Total parameter number is ==> $#" # Check whether number of the parameter is less than 2 [ "$#" -lt 2 ] && echo "The number of parameter is less than 2.Stop here." && exit 0 echo "The whole parameter is ==> '$@'" echo "The first parameter is ==> $1" echo "The first parameter is ==> $2" exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh05.sh 1a 2b 3c 4d The script's name is ==> sh05.sh Total parameter number is ==> 4 The whole parameter is ==> '1a 2b 3c 4d' The first parameter is ==> 1a The first parameter is ==> 2b
注:从以上程序可以看出与参数有关的预设变量如何表示 5 条件表达式 5.1 if 结构
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to show if else expression # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH read -p "Please input [Y/N]" choice if [ "$choice" == "Y" ] || [ "$choice" == "y" ];then     echo "OK, continue"     exit 0 fi if [ "$choice" == "N" ] || [ "$choice" == "n" ];then     echo "Oh, interupt"     exit 0 fi exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh06.sh Please input [Y/N]y OK, continue $ bash sh06.sh Please input [Y/N]n Oh, interupt
5.2 if else 结构
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to show if else expression # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH read -p "Please input [Y/N]" choice if [ "$choice" == "Y" ] || [ "$choice" == "y" ];then     echo "OK, continue"     exit 0 elif [ "$choice" == "N" ] || [ "$choice" == "n" ];then     echo "Oh, interupt"     exit 0 else     echo "Input [Y/N]" fi exit 0
5.3 case
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to show case expression # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH read -p "Tell me your choice:[1-3]=>" choice case $choice in     "1")         echo "Your choice is ONE"     "2")         echo "Your choice is TWO"     "3")         echo "Your choice is THREE" esac exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh08.sh Tell me your choice:[1-3]=>2 Your choice is TWO $ bash sh08.sh Tell me your choice:[1-3]=>1 Your choice is ONE $ bash sh08.sh Tell me your choice:[1-3]=>3 Your choice is THREE
6 函数
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to test function # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH function myprint(){     echo -n "Your choice is " } read -p "Tell me your choice:[1-3]=>" choice case $choice in     "1")         myprint;echo "ONE"     "2")         myprint;echo "TWO"     "3")         myprint;echo "THREE" esac exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh09.sh Tell me your choice:[1-3]=>1 Your choice is ONE $ bash sh09.sh Tell me your choice:[1-3]=>2 Your choice is TWO $ bash sh09.sh Tell me your choice:[1-3]=>3 Your choice is THREE
7 循环 7.1 while
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program shows while expression # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH while [ "$choice" != "yes" ] do     read -p "Give your choice [yes/no]:" choice done exit 0
调用:
[u]复制代码[/u] 代码如下:
$ bash sh10.sh Give your choice [yes/no]:no Give your choice [yes/no]:no Give your choice [yes/no]:nx Give your choice [yes/no]:yes
7.2 for
[u]复制代码[/u] 代码如下:
# !/bin/bash # Program: #       This program is used to demo for expression # History: # 2013/2/3 on_1y First release PATH=$PATH export PATH for choice in 1 2 3 do     echo "your choice is $choice" done exit 0
调用示例:
[u]复制代码[/u] 代码如下:
$ bash sh11.sh your choice is 1 your choice is 2 your choice is 3
8 shell script的追踪与Debug sh -n xx.sh # 语法检查 sh -x xx.sh # 列出xx.sh的执行过程
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部