bash

If block always goes to else in Bash

旧时模样 提交于 2021-02-16 13:53:09
问题 The following segment of code goes to the else statement when it should be going into the elif . #The following line returns 3, 4 or 5 as the exit code. $BASH_EXEC adbE.sh "adb $ARGUMENT install $f" echo "the return code:$?." if [ $? -eq 5 ] then #do nothing, success continue elif [ $? -eq 4 ] then echo "WARNING" else echo "ERROR" break fi This part: echo "the return code:$?." echoes this to the screen: the return code:4. And it does not display WARNING . It only displays ERROR and then

Is there any reason not to quote variables?

旧街凉风 提交于 2021-02-16 13:28:32
问题 Is there any valid reason not to put all variables in a shell script in quotes? ("Not knowing any better" is not a valid reason in my opinion.) Generally speaking, quoting variables makes sure that they are seen as one variable, should they contain spaces or other special characters. So why would anyone ever go for an "unsafe" way and not quote variables? 回答1: So why would anyone ever go for an "unsafe" way and not quote variables? That is almost never the right thing to do. Newcomers to

Access bash positional parameter through variable

断了今生、忘了曾经 提交于 2021-02-16 09:17:25
问题 How to access bash positional parameter through a variable? e.g. I have a variable "pos", which can be anything between 1 to 6 (say). If pos==1 , I want to do: echo $1 If pos==2 , I want to do: echo $2 So on. Intuitively, I want to do something like: echo $$pos . I want to do it in one line. 回答1: Use variable indirection: echo "${!pos}" 回答2: Here are several solutions. Some may need a recent version of bash , others may still work with a very old one. Let us set up first our environment... $

Linux 环境变量配置

陌路散爱 提交于 2021-02-16 05:46:27
Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置MySQL环境变量路径:/home/uusama/mysql/bin Linux读取环境变量 读取环境变量的方法: export 命令显示当前系统定义的所有环境变量 echo $PATH 命令输出当前的 PATH 环境变量的值 这两个命令执行的效果如下 uusama@ubuntu:~$ exportdeclare -x HOME="/home/uusama"declare -x LANG="en_US.UTF-8"declare -x LANGUAGE="en_US:"declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"declare -x LESSOPEN="| /usr/bin/lesspipe %s"declare -x LOGNAME="uusama"declare -x MAIL="/var/mail/uusama"declare -x PATH="/home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin

linux 系统环境变量配置

三世轮回 提交于 2021-02-16 05:44:55
使用 Ubuntu 进行开发绕不开的就是环境变量的配置,由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,如果不了解其调用顺序,很有可能遇到配置了环境变量,而没有其作用的问题。本文将介绍Ubuntu Linux系统的环境变量。 一、Ubuntu Linux系统环境变量配置文件 Ubuntu Linux系统环境变量配置文件分为两种:系统级文件和用户级文件,下面详细介绍环境变量的配置文件。 1.系统级文件 : /etc/profile :在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。这个文件一般就是调用/etc/bash.bashrc文件。 /etc/bash.bashrc :系统级的bashrc文件,为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. /etc/environment : 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。 2.用户级文件 : ~/.profile : 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次

Assigning output of a command to a variable(BASH)

风格不统一 提交于 2021-02-16 05:02:31
问题 I need to assign the output of a command to a variable. The command I tried is: grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}' I try this code to assign a variable: UUID=$(grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}') However, it gives a syntax error. In addition I want it to work in a bash script. The error is: ./upload.sh: line 12: syntax error near unexpected token ENE=$( grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}

Assigning output of a command to a variable(BASH)

徘徊边缘 提交于 2021-02-16 04:59:51
问题 I need to assign the output of a command to a variable. The command I tried is: grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}' I try this code to assign a variable: UUID=$(grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}') However, it gives a syntax error. In addition I want it to work in a bash script. The error is: ./upload.sh: line 12: syntax error near unexpected token ENE=$( grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}

解决ssh连接超时时间(ssh timeout)的设置方法

走远了吗. 提交于 2021-02-16 03:40:03
本文介绍下,linux中ssh连接超时时间的设置方法,以避免总是被强行退出。有需要的朋友,参考下吧。 有关修改ssh连接超时时间的方法,网上介绍的很多了。 比如下面这个: 可以减少ssh连接超时等待的时间: 方法:ssh -o ConnectTimeout=3 192.168.0.10 或修改sshd_config文件里面的UseDNS 选项,改为UseDNS no。 聪明的读者,一定会发现,上面这个修改,其实是减少ssh的连接时间,就是让ssh的响应时间快一些。 这点可以参考之前的一篇文章:ssh连接超时(ssh的usedns选项)的解决办法 。 再来看,设置ssh超时时间的方法。 修改自己 root 目录下的.bash_profile文件,加上 export TMOUT=1000000 (以秒为单位) 然后运行: source .bash_profile 在/etc/ssh/sshd_config中加入: ClientAliveInterval=60 每一分钟,sshd都和ssh client打个招呼,检测它是否存在,不存时即断开连接。 注意:设置完成后,要退出ssh远程连接,再次登录后才可以生效。因为要再读取一次./bash_profile。 为了方便,将设置写成了如下脚本: echo export TMOUT=1000000 >> /root/.bash_profile

Shell 数组介绍

被刻印的时光 ゝ 提交于 2021-02-16 02:32:37
导读 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。 类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。 定义数组 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为: 数组名=(值1 值2 ... 值n) 例如: array_name=(value0 value1 value2 value3) 或者 array_name=( value0 value1 value2 value3 ) 还可以单独定义数组的各个分量: array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen 可以不使用连续的下标,而且下标的范围没有限制。 读取数组 读取数组元素值的一般格式是: ${数组名[下标]} 例如: valuen=${array_name[n]} 使用 @ 符号可以获取数组中的所有元素,例如: echo ${array_name[@]} 获取数组的长度 获取数组长度的方法与获取字符串长度的方法相同,例如: # 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得数组单个元素的长度 lengthn=${

Linux运维70个Shell脚本实例

十年热恋 提交于 2021-02-15 13:31:35
1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ? 1 2 3 4 . /show .sh file1.txt cat show.sh #!/bin/bash echo $1 (LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。) 2) 如何在脚本中使用参数 ? 第一个参数 : $1,第二个参数 : $2 例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ? 1 2 3 4 . /copy .sh file1.txt /tmp/ cat copy.sh #!/bin/bash cp $1 $2 3) 如何计算传递进来的参数 ? $# 4) 如何在脚本中获取脚本名称 ? $0 5) 如何检查之前的命令是否运行成功 ? $? 6) 如何获取文件的最后一行 ? tail-1 7) 如何获取文件的第一行 ? head-1 8) 如何获取一个文件每一行的第三个元素 ? awk'{print $3}' 9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素 awk'{ if ($1 == "FIND") print $2}' 10) 如何调试 bash 脚本 将 -xv 参数加到 #!/bin/bash 后 例子: #!/bin/bash –xv 11) 举例如何写一个函数 ? ? 1 2 3 function