shell脚本

使用 shell 脚本配置 iOS 工程

╄→гoц情女王★ 提交于 2019-11-30 07:06:59
  APP开发过程中,往往需要在多个网络环境或配置中进行切换,以获取不同配置的APP,甚至有时需要用一套代码经过简单的配置生成不同的APP。而手动配置费时费力,且容易出错。这里介绍用脚本工具,去生成不同配置的APP工程。 1. 需求分析 在配置工程中我们需要事先知道有哪些配置项: APP 启动图、图标等资源文件。 APP 名称、版本号、bundleID。 APP 相关的微信 APPKey、scheme。 网络环境、部分代码替换。 provisioning profile 修改 分析以上需要配置的项,我们可以发现这些配置项可以分为 三类 ,分别是: 资源文件替换 plist 字段修改 部分代码替换 接下来介绍如何实现满足以上需求的Shell脚本。 2. 脚本设计&实现 2.1 创建脚本   首先创建一个shell脚本文件,在命令行工具中输入 touch xxx.sh 就可以创建shell脚本文件,在这里将shell脚本命名为: projectDeploy.sh 。   运行脚本时在命令行工具中切换到脚本文件所在的路径,输入: sh projectDeploy.sh 命令就可以运行脚本了。 2.2 脚本传参 我们需要传入参数告诉脚需要的具体配置,shell 脚本传入参数的方式有多种,这里只介绍一种: while getopts ":e:s:" opt do case $opt in e

shell 入门及常用命令

拥有回忆 提交于 2019-11-30 06:15:17
1.shell 是什么 shell是指一种程序, 它是和linux沟通的桥梁, 这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务, Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。。我们通常说的shell是指shell脚本, shell脚本的编写语言可以有多种, 比如c、php等, 只要有对应的解释器就可以运行。 Linux 的 Shell 种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh)是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。 Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell Bourne Again Shell(/bin/bash)LinuxOS 默认的,它是 Bourne Shell 的扩展。 与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面 C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh)

shell重定向的顺序问题

旧街凉风 提交于 2019-11-30 05:27:58
三个默认的文件描述符 0 : stdin(标准输入) 1 : stdout(标准输出) 2 : stderr(标准错误输出) 系统中这3个文件描述符所对应的文件: 重定向顺序 示例脚本 echo "hello world" echo "xxx" sh test.sh hello world xxx sh test.sh >/tmp/out $ cat /tmp/out hello world xxx sh -x test.sh >/tmp/out 2>/tmp/err stdout和stderr分别被重定向到/tmp/out和/tmp/err。 $ cat /tmp/out hello world xxx $ cat /tmp/err + echo 'hello world' + echo xxx sh -x test.sh 2>&1 >/tmp/out stdout被重定向到/tmp/out,stderr被重定向到stdout。因为在执行2>&1的时候,stdout对应的文件为/dev/pts/2,所以stderr的输出仍为stdout,后面的stdout被重定向到/tmp/out。 $ sh -x test.sh 2>&1 >/tmp/out + echo 'hello world' + echo xxx $ cat /tmp/out hello world xxx 文件描述符

【转】shell处理mysql增删改查

北慕城南 提交于 2019-11-30 05:23:51
这几天做一个任务,比对两个数据表中的数据,昨天用PHP写了一个版本,但考虑到有的机器没有php或者php没有编译mysql扩展,就无法使用mysql系列的函数,脚本就无效了,今天写个shell版本的,这样,在所有linux系列机器上就都可以运行了。 shell操作mysql其实就是通过mysql命令通过参数去执行语句,跟其他程序里面是一样的,看看下面这个参数: -e, --execute=name Execute command and quit. (Disables --force and history file.) 因此我们可以通过mysql -e来执行语句,就像下面这样: mysql -hlocalhost -P3306 -uroot -p123456 $test --default-character-set=utf8 -e "select * from users" 执行之后返回下面结果: 在shell脚本中操作mysql 导出数据 MYSQL="mysql -h192.168.1.102 -uroot -p123456 --default-character-set=utf8 -A -N" #这里面有两个参数,-A、-N,-A的含义是不去预读全部数据表信息,这样可以解决在数据表很多的时候卡死的问题 #-N,很简单,Don't write column names in

1.2 位于Shell脚本第一行的#!

人盡茶涼 提交于 2019-11-30 04:22:54
学习《shell脚本学习指南》一书,记录总结,便于自己回忆,希望对你有帮助! 2.4 自给自足的脚本:位于第一行的 #! 1.Shell脚本执行过程   当Shell执行一个程序时,会要求UNIX内核启动一个新的进程,以便在该进程里执行所指定的程序。 内核知道如何为编译型程序做这件事。但Shell脚本并非编译型程序;当Shell要求内核执行它时,内核将无法做这件事。 内核会告诉Shell这个我解决不了,接着Shell就会启动一个新的 /bin/sh (标准Shell)副本来执行该程序。 2.为什么Shell脚本要加 #!    现行的UNIX系统都会拥有好几个Shell,通过哪一种Shell去运行脚本,我们需要告知UNIX内核。这样做有助于执行机制通用化, 让用户得以直接引用任何的程序语言解释器,而并非一个命令Shell。 3.如何设置 #! 方法就是,通过在脚本文件中第一行设置: #! 符号 [root@localhost test]# vim nusers #! /bin/sh -  当没有Shell选项时,建议写为 "-"who | wc -l 4.避免几个初级陷阱 #!这一行的长度有限制,系统不同限制从63到1024个字符不等 不在选项之后放置任何空白,空白会更这选项传递给引用的程序 你需要知道解释器的完整路径名称。    来源: https://www.cnblogs

ansible 远程执行时提示 command not found 问题

僤鯓⒐⒋嵵緔 提交于 2019-11-30 03:47:43
问题 最近在学习 ansible ,在使用普通用户远程执行 ip a 命令是发现提示错误:/bin/sh: ip: command not found。 原因 command not found 命令未找到,一般想到的是环境变量的问题。网上查找资料,也证实了这个猜测,根本原因是 ansible 登录方式为 non-login shell(与之对应的是 login shell )。login shell 登陆后会加载 /etc/profile、~/.bash_profile,而 non-login shell 登陆后不会加载 /etc/profile、~/.bash_profile,而是加载 /etc/bashrc、~/.bashrc,一般的环境变量都设置在 /etc/profile、~/.bash_profile,所以这时就出现了找不到命令的情况。 login shell:取得 shell 需要完整的登录流程,就是说通过输入账号和密码登录系统。 non-login shell:取得 shell 不需要重复登录的举动。比如 X Window 登录 linux 后,再以 X 的图形界面启动终端机,此时那个终端机并没有需要输入账号和密码或者在原本的 shell 环境下再次执行 sh 命令,同样也没有输入账号密码就进入新的 shell环境(前一个 shell 的子进程)。 解决方案 把

shell中 >/dev/null 2>&1是什么意思

浪子不回头ぞ 提交于 2019-11-30 03:37:11
原文地址: http://juke.outofmemory.cn/entry/295292 我们经常能在 shell 脚本中发现 > /dev/ null 2 >& 1 这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了 2 >& 1 > /dev/ null ,出了一点小问题之后,我才开始去了解这段命令背后的“玄机”。 shell重定向介绍 就像我们平时写的程序一样,一段程序会处理外部的输入,然后将运算结果输出到指定的位置。在交互式的程序中,输入来自用户的键盘和鼠标,结果输出到用户的屏幕,甚至播放设备中。而对于某些后台运行的程序,输入可能来自于外部的一些文件,运算的结果通常又写到其他的文件中。而且程序在运行的过程中,会有一些关键性的信息,比如异常堆栈,外部接口调用情况等,这些都会统统写到日志文件里。 shell脚本也一样,但是我们一般在使用shell命令的时候,更多地还是通过键盘输入,然后在屏幕上查看命令的执行结果。如果某些情况下,我们需要将shell命令的执行结果存储到文件中,那么我们就需要使用输入输出的重定向功能。 文件描述符 当执行shell命令时,会默认打开3个文件,每个文件有对应的文件描述符来方便我们使用: 类型 文件描述符 默认情况 对应文件句柄位置 标准输入(standard input) 0 从键盘获得输入 /proc

Shell编程-控制结构 | 基础篇

别说谁变了你拦得住时间么 提交于 2019-11-30 03:18:49
if-then-else分支结构 if-then-else是一种基于条件测试结果的流程控制结构。如果测试结果为真,则执行控制结构中相应的命令列表;否则将进行另外一个条件测试或者退出该控制结构。 if-then-else语法格式: if 条件1 then 命令列表1 elif 条件2 then 命令列表2 else 命令列表3 fi 执行逻辑流程图 说明:当条件1成立时,则执行命令列表1并退出if-then-else控制结构;如果条件2成立,则执行命令列表2并退出if-then-else控制结构;否则执行命令列表3并退出if-then-else控制结构。在同一个if-then-else结构中只能有一条if语句和一条else语句,eilf语句可以有多条。其中if语句是必须的,elif和else语句是可选的。 Shell脚本首先判断文件test1是否可读,如果是,则输出 is readable !的提示信息;否则不进行任何动作。 [root@localhost 20190105]# vi test.sh filename=test1 if [ -r $filename ] //输出test1可读则输出信息 then echo $filename' is readable !' fi [root@localhost 20190105]# sh test.sh test1 is

Shell编程-条件测试 | 基础篇

∥☆過路亽.° 提交于 2019-11-30 03:18:38
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令。除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux系统提供的其他程序一样执行这个文件,这个命令文件就叫做Shell程序或者Shell脚本。当运行这个文件时,它会像在命令行输入这些命令一样顺序地执行它们。 Shell脚本支持变量、命令行参数、交互式输入、函数模块、各种控制语句等高级编程语言的特性,如if、case、while和for等。利用Shell程序设计语言可以编写出功能非常复杂的脚本程序,把大量的任务自动化,尤其是那些需要输入大量命令而在执行过程中不太需要与用户进行干预的系统管理任务。 为了让Shell能读取并且执行Shell程序,Shell脚本的文件权限必须被设置为可读和可执行。为了让Shell可以找到程序,可以选择输入完全路径名,或者将这个脚本的路径放在PATH环境变量指定的路径列表中。Shell脚本不是复杂的程序,它是由上往下逐行解释执行的。脚本的第一行总是以“#!<Shell解释器文件路径>”开始,用来指定该脚本是使用那种Shell进行解释执行。 编写Shell脚本 1)使用VI或者其他任意的文本编辑工具创建一个名为HelloWorld.sh的文件,并在其中加入以下内容: [root@localhost ~]# vi

shell使用别名

人走茶凉 提交于 2019-11-30 03:10:54
在shell脚本中使用alias inux shell有交互式与非交互式两种工作模式。我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式。 shell提供了alias功能来简化我们的日常操作,使得我们可以为一个复杂的命令取一个简单的名字,从而提高我们的工作效率。在交互式模式下,shell的alias扩展功能是打开的,因此我们可以键入自己定义的alias别名来执行对应的命令。 但是,在非交互式模式下alias扩展功能默认是关闭的,此时仍然可以定义alias别名,但是shell不会将alias别名扩展成对应的命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH中均没有与alias别名同名的命令,则shell会“抱怨”找不到指定的命令。 那么,有没有办法在非交互式模式下启用alias扩展呢?答案是使用shell内置命令shopt命令来开启alias扩展选项。shopt是shell的内置命令,可以控制shell功能选项的开启和关闭,从而控制shell的行为。shopt的使用方式如下: shopt -s opt_name Enable (set) opt_name. shopt -u opt_name Disable (unset) opt_name. shopt opt_name Show current status