Linux_Shell_脚本参数接收键盘输入

#!/bin/bash

#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
read -t 30 -p "请输入用户名称:" name
echo -e "\n"
echo "用户名为:$name" #提示“请输入密码”并等待30秒,把用户的输入保存入变量age中,输入内容隐藏
read -t 30 -s -p "请输入用户密码:" age
echo -e "\n"
echo "用户密码为:$age" #提示“请输入性别”并等待30秒,把用户的输入保存入变量sex中,只接受一个字符输入
read -t 30 -n 1 -p "请输入用户性别:" sex
echo -e "\n"
echo "性别为$sex"

Shell环境定义

临时环境变量

  所谓临时变量是指在用户在当前登陆环境生效的变量,用户登陆系统后,直接在命令行上定义的环境变量便只能在当前的登陆环境中使用。当退出系统后,环境变量将不能下次登陆时继续使用。

将环境变量永久生效

通过将环境变量定义写入到配置文件中,用户每次登陆时系统自动定义,则无需再到命令行重新定义。定义环境变量的常见配置文件如下:

/etc/profile 针对系统所有用户生效,此文件应用于所有用户每次登陆系统时的环境变量定义

$HOME_name/.bash_profile 针对特定用户生效,$HOME为用户的宿主目录,当用户登陆系统后,首先继承/etc/profile文件中的定义,

再应用$HOME/.bash_profile文件中的定义。

系统预定义的环境变量

  系统环境变量对所有用户有效,如:$PATH、$HOME、$SHELL、$PWD等等,如下用echo命令打印上述的系统环境变量:

shell脚本编程

  同传统的编程语言一样,shell提供了很多特性,这些特性可以使你的shell脚本编程更为有用。

创建Shell脚本

  一个shell脚本通常包含如下部分:

首行

第一行内容在脚本的首行左侧,表示脚本将要调用的shell解释器,内容如下:

!/bin/bash

!符号能够被内核识别成是一个脚本的开始,这一行必须位于脚本的首行,/bin/bash是bash程序的绝对路径,在这里表示后续的内容将通过bash程序解释执行。

注释

注释符号# 放在需注释内容的前面,如下:

内容

可执行内容和shell结构

Shell脚本的权限

  一般情况下,默认创建的脚本是没有执行权限的。

  没有权限不能执行,需要赋予可执行权限。

Shell脚本的执行

1,输入脚本的绝对路径或相对路径

 /root/helloWorld.sh

 ./helloWorld.sh

2,bash或sh +脚本

bash /root/helloWorld.sh

sh helloWorld.sh

注:当脚本没有x权限时,root和文件所有者通过该方式可以正常执行。

3,在脚本的路径前再加". " 或source

source /root/helloWorld.sh

. ./helloWorld.sh

区别:第一种和第二种会新开一个bash,不同bash中的变量无法共享。但是使用. ./脚本.sh 这种方式是在同一个shell里面执行的。

Shell变量

  变量:是shell传递数据的一种方式,用来代表每个取值的符号名。当shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。

变量设置规则:

  1,变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。

  2,在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。

  3,变量用等号连接值,等号左右两侧不能有空格。

  4,变量的值如果有空格,需要使用单引号或者双引号包括。

变量分类

  Linux Shell中的变量分为用户自定义变量,环境变量,位置参数变量和预定义变量。可以通过set命令查看系统中存在的所有变量。

  系统变量:保存和系统操作环境相关的数据。$HOME、$PWD、$SHELL、$USER等等

  位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定。

  预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

用户自定义变量

  用户自定义的变量由字母或下划线开头,由字母,数字或下划线序列组成,并且大小写字母意义不同,变量名长度没有限制。

设置变量

  习惯上用大写字母来命名变量。变量名以字母表示的字符开头,不能用数字。

变量调用

  在使用变量时,要在变量名前加上前缀“$”.

  使用echo 命令查看变量值。eg:echo $A

变量赋值

1,定义时赋值:

变量=值      ** 等号两侧不能有空格 **

eg:

STR="hello world"

A=9
2, 将一个命令的执行结果赋给变量

A= `ls -la` 反引号,运行里面的命令,并把结果返回给变量A

A=$(ls -la) 等价于反引号

eg:

aa=$((4+5))

bb=`expr 4 + 5 `
3,将一个变量赋给另一个变量

eg : A=$STR

变量叠加

eg:#aa=123

eg:#cc="$aa"456

eg:#dd=${aa}789

单引号和双引号的区别:

  现象:单引号里的内容会全部输出,而双引号里的内容会有变化

  原因:单引号会将所有特殊字符脱意

NUM=10

SUM="$NUM hehe" echo $SUM

输出10 hehe

  SUM2='$NUM hehe' echo $SUM2

输出$NUM hehe

列出所有的变量

  set

删除变量

  unset NAME

eg :

  # unset A 撤销变量 A

  # readonly B=2 声明静态的变量 B=2 ,不能 unset

用户自定义的变量,作用域为当前的shell环境。

环境变量

  用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和其所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

  export 变量名=变量值 申明变量

  作用域:当前shell以及所有的子shell。

位置参数变量

$n n为数字,$0代表命令本身,$1-$9代表第一到第9个参数,十以上的参数需要用大括号包含,如${10}。
$* 代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数
$@ 代表命令行中的所有参数,把每个参数区分对待。以"$1" "$2" … "$n" 的形式输出所有参数
$# 代表命令行中所有参数的个数。添加到shell的参数个数

  shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不再可用

  $* 和 $@的区别

  1,$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"$1" "$2" … "$n" 的形式输出所有参数;

  2,当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;

  3,"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

  

预定义变量

$? 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定)
$$ 当前进程的进程号(PID),即当前脚本执行时生成的进程号
$! 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程 &

read命令

  read [选项] 值

  read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入)

    eg:

read –t 30 –p “please input your name: ” NAME

echo $NAME

read –s –p “please input your age : ” AGE

echo $AGE

read –n 1 –p “please input your sex [M/F]: ” GENDER

echo $GENDER

Linux脚本教程的更多相关文章

  1. Linux Shell脚本教程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  2. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/

  3. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

  4. Kali Linux 安装教程-转

    rootoorotor昨天折腾了 Kali Linux 1.0,把大概的配置过程记录下来,希望对想接触或使用Kali Linux的同学有所帮助.   请注意: 1.本文为面向新手的教程,没技术含量,没 ...

  5. linux 入门教程

    linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统 ...

  6. Linux makefile 教程 非常详细,且易懂(转)

    转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...

  7. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  8. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  9. Linux学习教程 | 全文目录

    本教程最大的特点是通俗易懂,并且非常详细,花费 7 天时间即可快速了解 Linux. 第一章 Linux简介 1.1 操作系统是什么,操作系统概述 1.2 Linux是什么,有哪些特点? 1.3 Li ...

随机推荐

  1. PTA 是否二叉搜索树 (25分)

    PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...

  2. Leetcode 课程表 C++ 图的深度搜索和广度搜索练习

    广度搜索(degree) struct GraphNode{ int label; vector<GraphNode*> neighbours; GraphNode(int x):labe ...

  3. CVE-2020-0796 RCE复现

    虽然热度已经过了,之前留的笔记发(水)一篇博客 影响版本 适用于32位系统的Windows 10版本1903 Windows 10 1903版(用于基于x64的系统) Windows 10 1903版 ...

  4. 基于hadoop_yarn的资源隔离配置

    目录 yarn的基本概念 scheduler 集群整体的资源定义 fair scheduler简介 配置demo 队列的资源限制 基于具体资源限制 基于权重资源限制 队列运行状态限制 基于用户和分组限 ...

  5. 在Vs code中使用sftp插件以及连接windows远程sftp协议部署指导(解决vscode的sftp插件中文目录乱码问题)

    一.启动SFtp 二.上手vs code SFTP插件 2.1 初始配置 2.2解决乱码问题 三.SFTP配置 3.1常用配置 3.2示例配置 四.SFTP使用 五.扩展阅读 一.启动SFtp 话说小 ...

  6. go微服务框架Kratos笔记(六)链路追踪实战

    什么是链路追踪 借用阿里云链路追踪文档来解释 分布式链路追踪(Distributed Tracing),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等,它为分布式应用的开发者提供了完整的调用链路还 ...

  7. 提升开发效率的notepad++一些快捷方法(实体类的创建和查询sql语句的编写)

    新手要创建数据库表中,对应字段名的实体类,是不是感觉很麻烦,可以用notepad++快速的把实体类中的字段名进行排版,随后直接粘入idea使用 下面是navicat的演示 选择一个表,右键选择设计表 ...

  8. [bzoj5510]唱跳rap和篮球

    显然答案可以理解为有(不是仅有)0对情况-1对情况+2对情况-- 考虑这个怎么计算,先计算这t对情况的位置,有c(n-3t,t)种情况(可以理解为将这4个点缩为1个,然后再从中选t个位置),然后相当于 ...

  9. [luogu6838]网络站点

    先分析答案,即$x$和$y$的关系有以下两种: 1.$y$在$x$子树中,那么答案即为包含$y$的$x$的儿子 2.$y$不在$x$子树中,那么答案即为$x$的父亲 那么第一个问题就是判断$y$是否在 ...

  10. VSCode + PicGo + Github + jsDelivr 搭建稳定快速高效图床

    VSCode + PicGo + Github + jsDelivr 搭建稳定快速高效图床 目录 前言 准备 配置 验证 前言 所谓图床,就是将图片储存到第三方静态资源库中,其返回给你一个 URL 进 ...