shell脚本

Shell变量基础详解

橙三吉。 提交于 2019-11-29 06:53:24
一、变量简介 变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存空间中变量的名字就可以取出与变量对应的数据。使用变量的最大好处就是使程序开发更为方便,当然,在编程中使用变量也是必须的。否则就很难完成相关的工作。 变量赋值的方式:先写变量名称,紧接着就是“=”,最后是值。 “=”号前后不允许有空格。 一般情况下,定义变量时,需要给变量的值带双引号,以防止出错,特别是当值的内容中有空格时,必须带双引号。 二、变量的类型 变量可分为两大类: 环境变量 也可称为全局变量,可以在创建它们的Shell及其派生出的任意子shell中使用。环境便令也可分为自定义环境变量和bash内置的环境变量; 普通变量 也可称为局部变量,只能在创建它们的shell函数或shell脚本中使用。 三、环境变量 环境变量一般是指用“export”内置命令导出的便令,用于定义Shell的运行环境,保证Shell命令的正确执行。 环境变量可以在命令行设置和创建,但用户退出命令行时,这些变量值也会随之丢失,因此,如果希望永久保存环境便令,可在用户家目录下的.bash_profile或.bashrc文件中,或者全局配置/etc/profile或/etc/bashrc 文件中。在讲环境变量放入以上文件中,每次用户登录时这些变量都将被初始化。 按照系统规范,所有的环境的名称均采用大写形式

shell习题-20

徘徊边缘 提交于 2019-11-29 06:23:57
题目要求 编写一个问候程序,它执行时能根据系统当前的时间向用户输出问候信息。假设从半夜到中午为早晨,中午到下午六点为下午,下午六点到半夜为晚上。 参考答案 if [ -a ] 并且的意思 #!/bin/bash d=`date +%H` if [ $d -ge 0 -a $d -lt 7 ] then tag=1 elif [ $d -ge 7 -a $d -lt 12 ] then tag=2 elif [ $d -ge 12 -a $d -lt 18 ] then tag=3 else tag=4 fi case $tag in 1) echo "早晨好" ;; 2) echo "上午好" ;; 3) echo "下午好" ;; 4) echo "晚上好" ;; *) echo "脚本出错啦" ;; esac 题目要求 写一个shell脚本,实现简单的弹出式菜单功能,用户能根据显示的菜单项从键盘选择执行对应的命令。 参考答案 更喜欢第二种方式 #!/bin/bash PS3="Please input your choice(1-4): " select i in w ls pwd quit do case $i in w) w ;; ls) ls ;; pwd) pwd ;; quit) exit ;; *) echo "Please input 1-3." ;; esac

Eclipse安装python、shell开发插件

人走茶凉 提交于 2019-11-29 06:18:42
1、安装python运行环境 python插件地址: http://pydev.org/updates 安装后重启即可看到python脚本内容已经高亮、、、、ok了 2、安装shell运行环境 1、安装“man-page viewer”插件(ShellEd需要,有的机器不需要,先装上) 安装地址: http://download.eclipse.org/technology/linuxtools/updates-nightly/ 2、安装“shelled”插件 在 http://sourceforge.net/projects/shelled/files/latest/download 下载ShellEd的zip包 这个包十分的难以下载,下面是我下载后上传的地址 : https://download.csdn.net/upload/11664760 以archive,即zip包的方式设置数据源: 在shell文件上点右键->open with->选择shell script Editor,发现打开的SHELL的文件已经语法高亮: 有的eclipse默认是用eclipse自带的text editor打开shell文件的,安装了shelled之后,可以修改使用shelled默认打开*.sh文件,如果没有*.sh这个选项,可以在右边add按钮手工添加一个: 3

【Shell】检查软件包是否安装

眉间皱痕 提交于 2019-11-29 05:12:50
检查软件包是否安装 #!/bin/bash if rpm -q sysstat &>/dev/null; then echo "sysstat is already installed." else echo "sysstat is not installed!" fi 说明: sysstat即为我们要检测的软件包 rpm是软件包的管理工具,-q是使用询问模式查询该软件包存不存在。 then为如果条件成立,则执行下面的命令 进阶版 #!/bin/bash if rpm -q $@ &>/dev/null; then echo "$@ is already installed." else echo "$@ is not installed!" fi 输出: 脚本变命令 步骤: [root@node1 shell]# ls demo.sh [root@node1 shell]# mv demo.sh demo && cp demo /bin [root@node1 shell]# demo 这是一个演示脚本 注:将脚本放入 /bin 目录前,要确保自定义命令和该目录下已有命令不重名 来源: https://www.cnblogs.com/BabySermonizer/p/11456605.html

shell编程实战7

谁说我不能喝 提交于 2019-11-29 05:09:50
1. 计算文档中数字的个数 2. 对比两台机器文件的差异 #!/bin/bash dir=/data/web [ -f /tmp/md5.list ] && >/tmp/md5.list # /tmp目录是一定存在的,md5.list文件必须清空或删除 find $dir/ -type f > /tmp/file.list while read line do md5sum $line >> /tmp/md5.list # 循环追加 done </tmp/file.list scp /tmp/md5.list B:/tmp/ [ -f /tmp/check_md5.sh ] && rm -f /tmp/check_md5.sh # 要嵌入的脚本文件 cat > /tmp/check_md5.sh << EOF #!/bin/bash dir=/data/web n=\`wc -l /tmp/md5.list\` # 由于for循环中的文件的行中不能有空格,所有把循环条件转换为文件的行数 for i in \`seq 1 \$n\` # 取变量的值$n,也要脱义,否则就是$n的值 do file_name=\`sed -n "\$i"p /tmp/md5.list |awk '{print $2}'\` md5=\`sed -n "\$i"p /tmp/md5.list |awk '

shell脚本编写用户管理系统

拟墨画扇 提交于 2019-11-29 04:59:22
作业要求: 输出如图所示的图形,编写代码可以实现所有的要求 #! /bin/bash #这是创建用户管理系统的脚本 #Date:2019年9月3号 #filename:user.sh #用到了判断、循环,思路很清晰,中等难度 #自己写一个这样的框 echo " //===========================\\ | 用户管理系统 | --------------------------------------------------- | 1、创建用户 | | 2、删除用户 | | 3、锁定用户 | | 4、解锁用户 | | 5、查看用户 | | 6、退出脚本 | --------------------------------------------------- " #写一个循环 while : do #执行操作,输入你要操作的序号(1、2、3、4、5、6) read -p "请输入你的操作选择:" user #创建用户,user输入1时,写一个if条件语句 if [ $user -eq 1 ] then read -p "请输入你的用户名:" name #判断输入的用户名是否存在,若存在可以查看用户id,该命令能够执行,返回值1,说明用户已存在不能创建了;若用户不存在,就无法执行该命令,返回值为0,就可以创建用户 id $name &> /dev/null if

shell习题-18

我只是一个虾纸丫 提交于 2019-11-29 04:58:11
题目要求 提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题: 输入的字符不符合网卡名字规范,怎么应对。 名字符合规范,但是根本就没有这个网卡又怎么应对。 参考答案 #!/bin/bash ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/eth.list while : do eths=`cat /tmp/eth.list |xargs` read -p "Please input a if name(The eths is `echo -e "\033[31m$eths\033[0m"`): " eth if [ -z "$eth" ] then echo "Please input a if name." continue fi if ! grep -qw "$eth" /tmp/eth.list then echo "The if name is error." continue else break fi done if_ip() { ip add show dev $1 |grep ' inet ' |awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt n=`wc -l /tmp/$1.txt|awk '{print $1}'` if [

ADB常用命令

一世执手 提交于 2019-11-29 04:53:17
ADB常用命令 常用命令 环境变量配置好后就可以开始使用命令了 显示系统中全部设备: adb devices 终止adb服务进程: adb kill-server 重启adb服务进程: adb start-server 查看屏幕分辨率: adb shell wm size 安装apk到sd卡: adb install -s // 比如:adb install -s baidu.apk 安装APK: adb install //比如:adb install baidu.apk 卸载APK: adb uninstall //比如:adb uninstall com.baidu.aaa 卸载app但保留数据和缓存文件: adb uninstall -k //比如:adb uninstall -k com.baidu.search 设备连接 连接设备: adb connect 192.168.1.61 断开设备: adb disconnect 192.168.1.61 列出手机装的所有app的包名: adb shell pm list packages 列出系统应用的所有包名: adb shell pm list package -s 列出除了系统应用的第三方应用包名:adb shell pm list package -3 adb shell pm list package -f

shell 强大的awk

匆匆过客 提交于 2019-11-29 04:52:55
from here 小用法,使用awk来对文件随机抽取n行 awk 'BEGIN{srand()} {print rand()"\t"$0}' input_file | sort -nk 1 | head -n line_num | awk -F "\t" '{print $2}' 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 使用方法 awk '{pattern + action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action

Shell 传递参数

坚强是说给别人听的谎言 提交于 2019-11-29 04:45:09
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n 。 n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: #!/bin/bash # author:菜鸟教程 # url:www.runoob.com echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; 为脚本设置可执行权限,并执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例! 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 另外,还有几个特殊字符用来处理参数: 参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n"