示例脚本及注释

1 - arguments


#!/bin/bash if [ -n "$1" ];then # 验证参数是否传入
echo "The first parameter is ${1}."
else
echo "No arguments!"
fi echo '$0 当前shell脚本的名称:' $0
echo '$0 当前shell脚本的PID:' $$
echo '$* 当前shell脚本的所有参数:' $*
echo '$@ 当前shell脚本的所有参数:' $@
echo '$# 当前shell脚本的参数个数:' $# for param in "$*" # 遍历$*
do
echo "\$* Parameters : $param"
done for param in "$@" # 遍历$@
do
echo "\$@ Parameters : $param"
done ### 依次读取当前shell脚本的所有输入参数
while [ -n "$1" ]
do
echo "参数为:$1, 参数个数为:$#"
shift # shift命令将参数变量左移一个位置
done # ### 执行脚本时,通过对应的位置参数和特殊变量来完成输入;
# $0 当前shell脚本的名称
# $n 当前shell脚本的第n个参数,$1是第一个参数,$2是第二个参数,${10}是第十个参数
# $* 当前shell脚本的所有参数(不包括脚本本身),将所有参数当作一个字符串整体
# $@ 当前shell脚本的所有参数(不包括脚本本身),循环遍历所有参数
# $# 当前shell脚本的参数个数(不包括脚本本身)
# $$ 当前shell脚本的PID
# $? 最后一个指令的返回值(退出状态);0表示没有错误,非0表示有错误
#
#
# ### 移动参数变量
# - shift命令将移动命令行参数变量左移一个位置,$2变量的值将会移动到$1,而$1变量的值将会被删除,且不能恢复;但是$0变量的值不变;
# - “shift n”表示移动n个位置;

2 - shift


#!/bin/bash if [ -z "$1" ] # -z 字符串的长度为零
then
echo "No arguments!"
fi function show_help(){
echo "Usage:"
echo " ./$0 -a Option A"
echo " ./$0 -b Option B"
echo " ./$0 -c Option C"
echo " ./$0 -h Show help information"
} count=1
while [ -n "$1" ] # 判断参数是否存在;–n 字符串的长度非零
do echo "第 $count 个命令行参数 : $1"
count=$[ $count+1 ] case $1 in
-a) echo "Perform action A" ;;
-b) echo "Perform action B" ;;
-c) echo "Perform action C" ;;
-h) show_help ;;
*) echo "$1 is not an option!"
break ;;
esac shift # 命令行参数值左移一位
# shift 2 # 使用"shift n"对命令行参数左移n位 done # ### 简单的命令行选项(只有选项,没有参数)
# - 适合使用shift命令和case语句处理
#
#
# ### shift命令
# - shift命令能够改变命令行参数的相对位置;
# - 默认将每个参数变量左移一个位置;变量$3的值移给变量$2,变量$2的值移位给变量$1,而变量$1的值被丢弃;变量$0的值和程序名称都保持不变;
# - 特别注意:将某一位参数移位掉后,该参数值永久丢失,不可恢复;
# - “shift n”表示移动n个位置;
#
#
# ### case语句
# - 本例中,case语句会匹配和执行所有的有效选项;
# - 如果只想匹配和执行第一个有效选项,不使用while循环和shift命令即可;
# - case语句的catch-all部分可以处理其他参数;

3 - read


#!/bin/sh echo -n "Enter your name:" # “echo -n”移掉字符串末尾的换行符,允许紧跟其后输入数据
read -t 5 name # 设置超时时间为3秒
echo "Hi, $name !" read -p "Enter your age:" age # -p选项,在read命令中指定提示
days=$[ $age * 365 ]
echo "$days days !" read -s -p "What do you want :" w1 w2 # 指定多个变量来获取多个输入
echo "You want to get more $w1 and $w2 !" read -n1 -p "Do you want to continue [Y/N]?" answer # -n1选项,接受到一个字符就退出
case $answer in
Y | y)
echo -e "\n Continue!";;
N | n)
echo -e "\n Goodbye!";;
*)
echo -e "\n Error Choice!";;
esac ### 示例:read命令从文件中读取内容的方法
echo -e "aaa\n222\nccc" > test.log # 创建示例文件
cat test.log # count=1
# cat test.log | while read line
# do
# echo "Line $count : $line"
# count=$[ $count + 1 ]
# done # cat test.log | \
# while read CMD; do
# echo $CMD
# done while read CMD; do
echo "$CMD"
done < test.log rm -rf test.log exit 0 # ### 在脚本运行时,通过read命令以交互的方式获取输入
# - 在脚本中使用“read variable”获取标准输入,并将数据存放到标准变量中;使用“$varialbe”调用输入;
# - read命令可以指定多个变量来获取多个输入;如果输入的值多于变量,多出的值会统一分配给最后一个变量;
# - 如果不指定变量,read命令会将所有接收到的数据都放到特殊环境变量REPLY中;
#
#
# ### read命令常用选项
# -p : 省略echo命令并指定变量名字,可以多个变量;
# -t <n> : 设置超时时间为n秒;
# -n<n> : 当输入的字符数目达到预定数目n时,自动退出,并将输入的数据赋值给变量;
# -s : 隐藏输入(不显示输入的数据),但实际上只是将输入字符的颜色设置与背景色相同;
#
#
# ### read命令从文件中读取内容
# - 利用管道和while循环,可以实现逐行读取文件内容;
# - 如果文件为空(没有数据),read命令会退出并返回非零退出状态码;

4 - getopts


#!/bin/bash function show_help(){
echo "Usage:"
echo " ./$0 -a option A"
echo " ./$0 -b <paramter> option B"
echo " ./$0 -c <paramter> option C"
echo " ./$0 -h Show help information"
} if [ -z "$1" ]
then
echo "No arguments!"
show_help
exit 1
fi str="$1"
if [ "${str:0:1}" != "-" ] || [ -z "${str:1:2}" ]; then
echo "Invalid option!"
exit 1
fi while getopts "ab:c:h" opt;
do
case "$opt" in
a) echo "Perform an action A"
echo "Next option index : $OPTIND";;
b) echo "Perform an action B with parameter value $OPTARG"
echo "Next option index : $OPTIND";;
c) echo "Perform an action C with parameter value $OPTARG"
echo "Next option index : $OPTIND";;
h) show_help;;
\?) echo "Invalid option or parameter!"
show_help
exit 1;;
esac
done # ### getopt和getopts
# - getopt和getopts命令可用于解析所有命令行参数,能够使Shell脚本实现选项列表的功能;
# - getopt是外部命令,可以支持长选项和可选参数;
# - getopts是shell内置命令,能够处理选项和参数之间的空格;自动去除选项前的破折号;但无法处理非-开头的选项;
#
#
# ### getopts命令
# - 使用形式:“getopts <optstring> <variable>”
# - 如果选项字符串optstring以冒号开始,表明禁止输出错误消息;如果其中的选项以冒号结尾,表明此选 项需要参数值;
# - 当前参数放在variable中;
# - 选项必须在其参数之前,而且必须用空格分开;
# - 如果需要参数的选项没有指定参数,将向标准错误中写入错误消息;
#
#
# ### getopts命令的变量
# - $OPTARG变量保存选项的参数值;
# - $OPTIND变量保存原始$*中下一个要处理的选项位置;
# - $OPTIND初值为1,遇到不带参数的选项将“optind += 1”,遇到带参数的选项将“optind += 2”

Shell - 简明Shell入门13 - 用户输入(UserInput)的更多相关文章

  1. Shell - 简明Shell入门

    本文以示例和注释的方式,对Shell编程的基本知识点进行了总结和回顾,所有脚本均已做了基本的调试和验证. Shell - 简明Shell入门 01 - 第一个脚本 脚本的定义.执行方法以及echo命令 ...

  2. Shell - 简明Shell编程

    本文是对Shell脚本编程的总结和回顾,所有涉及的脚本均已做了基本的调试和验证. [toc] 测试环境信息 [root@CentOS7 ~]# uname -a Linux CentOS7 3.10. ...

  3. Shell - 简明Shell入门01 - 第一个脚本(HelloShell)

    示例脚本及注释 #!/bin/bash echo "hello shell!" # 打印字符串"hello shell!" echo "Date: & ...

  4. Linux - 简明Shell编程13 - 用户输入(UserInput)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 1 - arguments #!/bin/bash i ...

  5. Shell - 简明Shell入门14 - 操作符(Operator)

    示例脚本及注释 #!/bin/bash echo "No code, just some comments." # ### 通配符 # * 代表任意(0个或多个)字符 # ? 代表 ...

  6. Shell - 简明Shell入门09 - 重定向(Redirection)

    示例脚本及注释 #!/bin/bash pwd > 1.log # 输出重定向到指定文件 date 1> 1.log # ">"与"1>" ...

  7. Shell - 简明Shell入门04 - 判断语句(If)

    示例脚本及注释 #!/bin/bash var=$1 # 将脚本的第一个参数赋值给变量var if test $var # test - check file types and compare va ...

  8. Shell - 简明Shell入门02 - 变量(Variable)

    示例脚本及注释 #!/bin/bash v1=test-variable_123 # 全局变量 v2=12345 v3='This is a test!' # 赋值语句使用单引号或双引号可以包含空格 ...

  9. Shell - 简明Shell入门15 - 调试(Debug)

    示例脚本及注释 #!/bin/bash -x for filename in t1 t2 t3 do touch $filename.txt echo "Create new file: $ ...

随机推荐

  1. matlab柱面图

    f=@(x,y)log(y);  % ln(x)函数,平行于x轴ezsurf(f,[-pi*2,pi*2,0,20])

  2. c语言const和c++const

    1.常量 常量是指值不能被改变的量,又叫做字面值 1.1常量分类 1)字符常量:'a', 'A', '*'. 2)字符串常量:"helloworld","ilovechi ...

  3. tp5,thinkphp5,隐藏index.php,隐藏入口文件

    一.找到/public/.htaccess文件 Apache: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews R ...

  4. 利用nginx打造个人简历网页

    1.下载nginx nginx官方网址:http://nginx.org/ 2.下载和解压 #下载:[root@iZwz9cl4i8oy1reej7o8pmZ soft]# wget http://n ...

  5. CImageList

    创建 有五个重载函数,分别如下: BOOL Create(int cx, int cy, UINT nFlags, int nInitial, int nGrow); BOOL Create(UINT ...

  6. day17(tomcat的安装,HTTP)

    Tomcat Tomcat是个小型服务器,由apache组织编写,转为发布java程序而写. 安装步骤: 官网:http://tomcat.apache.org/ 下载地址:http://tomcat ...

  7. How to resolve "your security settings have blocked an untrusted application from running" in Mac

    If you encounter the error "your security settings have blocked an untrusted application from r ...

  8. 从kepware定时取web api内容

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. noah

    1.url:controller/method 2.在index.php中设置display_errors:1 能看到错误提示

  10. bootstrap1相关学习文档

    <em>Bootstrap 框架</em>                                                    //倾斜 4.对齐 //设置文 ...