.bash文件 linux
2012-02-07 18:54:53 a454400828a 阅读数 1184
#!/bin/sh

给一个提示,输入内容加入变量

read -p "Enter your name:" name

echo "hello $name, welcome to my program"

myvar=foodforthought.tar.gz

字符串截取:

echo $myvar
echo ${myvar##*fo} 长
echo ${myvar#*fo}  短
echo ${myvar##*.}
echo ${myvar#*.}

read -p "Enter file name:" filename
echo extension:${filename##*.}

echo filename:${filename%%.*}


命令变量

cmd='ls'  

echo $cmd

cmd=$(ls)

echo $cmd


变量输出

#myvar=hello
#myvar=${myvar}world

#echo $myvar


根据文件名判断文件类型

#filename="foo.tar.gzip"

#if [ ${filename##*.} = "gz" ]
#then
#echo "${filename} is a tarball"
#elif [ ${filename##*. } = "c" ]
#then
#echo "${filename} is a c source"
#else
#echo "${filename} not a tarball or c source"

#fi


判断文件是否存在是否是文件或目录

#if [ -e a.c ]
#then
#echo a.c exist
#fi
#if [ -d a.c ]
#then
#echo a.c is a directory
#else
#echo a.c not a directory

#fi

例子:

#read -p "Enter filename:" filename
#if [ -e $filename ]
#then
    #if [ -d $filename ]
    #then
        #echo "directory"
    #fi
    #if [ -f $filename ]
    #then
        #echo "file"
    #fi
#else
    #echo "file not exist"

#fi


判断字符串相等

string=hello
if [ -z "$string" ]
then
    echo "len is zero"
else
    echo "not zero"
fi
if [ $string != "hello" ]
then
    echo "not equal"
else
    echo "equal"

fi


判断数字相等

myvar=03
if [ $myvar -eq 3 ]
then
    echo "equal -eq"
fi
if [ $myvar = "3" ]
then
   echo "equal ="

fi


for循环的运用

for x in one two three four
do
    echo $x
done
for name in /etc/r*
do
    if [ -d $name ]
    then
        #echo "$name (dir)"
    else
        #echo "$name"
    fi

done


全局变量

echo $0 本身
echo $1  第二个
echo $#  即代表argc 表示说有的数字

echo $@  代表所有的argv   字符串用


例子

filename=$1
echo extension:${filename##*.}
echo filename:${filename%%.*}

echo $@


for x in $@
do
    echo $x

done

在目录中改名:

for file in ./*.c
do
    mv $file ${file%.*}.d

done

until中自加变量 输出

myvar=0
until [ $myvar -eq 10 ]
do
    echo $myvar
    myvar=$(($myvar + 1))
done
2015-01-29 22:41:07 u012842205 阅读数 937


转载出处: http://blog.chinaunix.net/uid-20507571-id-1660969.html


(1)/etc/profile
全局(公有)配置,不管是哪个用户,登录时都会读取该文件。

(2)/ect/bashrc
Ubuntu没有此文件,与之对应的是/ect/bash.bashrc
它也是全局(公有)的
bash执行时,不管是何种方式,都会读取此文件。

(3)~/.profile
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。
另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile和~/.bash_login。

(4)~/.bash_login
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。

(5)~/.bash_profile
Unbutu默认没有此文件,可新建。
只有bash是以login形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc。

(6)~/.bashrc
当bash是以non-login形式执行时,读取此文件。若是以login形式执行,则不会读取此文件。

(7)~/.bash_logout
注销时,且是longin形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

下面是在本机的几个例子:
1. 图形模式登录时,顺序读取:/etc/profile和~/.profile
2. 图形模式登录后,打开终端时,顺序读取:/etc/bash.bashrc和~/.bashrc
3. 文本模式登录时,顺序读取:/etc/bash.bashrc,/etc/profile和~/.bash_profile
4. 从其它用户su到该用户,则分两种情况:
    (1)如果带-l参数(或-参数,--login参数),如:su -l username,则bash是lonin的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile和~/.bash_profile。
    (2)如果没有带-l参数,则bash是non-login的,它将顺序读取:/etc/bash.bashrc和~/.bashrc
5. 注销时,或退出su登录的用户,如果是longin方式,那么bash会读取:~/.bash_logout
6. 执行自定义的shell文件时,若使用“bash -l a.sh”的方式,则bash会读取行:/etc/profile和~/.bash_profile,若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh(这个不属于bash shell),则不会读取上面的任何文件。
7. 上面的例子凡是读取到~/.bash_profile的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。

2018-10-14 18:26:00 qq_21383435 阅读数 233

简介:我现在Mac系统上,有多个版本的hadoop,多个版本的hive,开发的时候需要排列组合。每次都修改配置,很麻烦,所有我想写个shell脚本,帮我自动化配置各种版本,主要是对.bash_profile文件的查找与替换

1. sed命令

1.1 简介

1.1.1 删除:d命令

$ sed '2d' example-----删除example文件的第二行。
$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
$ sed '$d' example-----删除example文件的最后一行。
$ sed '/test/'d example-----删除example文件所有包含test的行。

在看看以前我常写的sed ‘s/|/,/g’ aaa.txt>bbb.txt 这个的意思就是把aaa.txt文件中所有字符串|都换成,这是怎么表示的呢?S代表字符串,g表示行内全面替换。

1.1.1 替换:s命令

$ sed 's/test/mytest/g' example
-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
$ sed -n 's/^test/mytest/p' example
-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
$ sed 's/^192.168.0.1/&localhost/' example
-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
$ sed -n 's/able/\1rs/p' example
-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
$ sed 's#10#100#g' example
-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。
cat init.ora | grep -v  ^#|grep –v ^*  > initprod.ora

2. 典型用法

2.1 sed 查找某行,关键字,并且替换一行

注意这是在mac下的命令,与ceotos下命令差别一点
mac : sed -i ''
centos : sed -i
要操作的行

# hadopp
46行 export HADOOP_HOME=/Users/lcc/soft/hadoop/hadoop-2.7.4
47行 export export HADOOP_HOME=/Users/lcc/soft/hadoop/hadoop-3.0.3.2

命令

lcc@lcc ~$ sed -i ''   '46s/^.*HADOOP_HOME.*$/fff/' /Users/lcc/aa.txt
格式$ sed -i ''   '行s/^.*关键字.*$/fff/' 文件全路径

结果

# hadopp
fff
47行 export export HADOOP_HOME=/Users/lcc/soft/hadoop/hadoop-3.0.3.2

注意:不加行号,会替换全文件所有包含关键字的行

2.2 sed 查找某行,关键字,并且替换一行为路径

# export HADOOP_HOME=\/Users\/lcc\/soft\/hadoop\/hadoop-3.0.3.2
# 这一点本来想用变量,但是发现不行,后面的替换新的路径,必须反引号,双的
sed -i ''   's/^.*HADOOP_HOME=.*$/export HADOOP_HOME=\/Users\/lcc\/soft\/hadoop\/hadoop-3.0.3.2/'  ~/.bash_profile
echo "配置 /Users/lcc/soft/hadoop/hadoop-3.0.3.2"
2018-05-29 23:19:53 qq_29827369 阅读数 137

文件查看命令:

cat,tac,more,less,tail,head

bash特性:

1 命令补全

2路径补全

3历史命令

4命令行 展开

5命令的状态结果:

成功 0

失败 1~255

echo $?返回上次命令的状态结果


2014-12-10 21:49:08 pretent 阅读数 554

bash中条件判断if使用如下:

if [ expr1 ] ; then
statment1 ...
elif [ expr2 ] ;then 
statment2 ...
elif [ exprn ] ;then
statmentn ...fi

不管是单分支if(没有elif),还是双分支(if......else),还是多分支最后都要以fi另起一行结尾。

文件测试:
- e:测试文件是否存在。
- f :测试是否为普通文件。
- d:测试文件是否为目录。
- r :测试文件是否可读。
-w:测试文件是否可写。
- x:测试文件是否可执行。

可以使用exit # 来结束脚本执行。
#为任意数字,那么此脚本的执行状态($?)返回码即为数字#。
如果bash脚本没有明确定义退出状态吗,那么最后一条命令的执行状态吗就是此脚本执行的状态吗。

linux bash

阅读数 144

vim.bash_history查看所有的shell命令

博文 来自: robot__cat

linux bash

阅读数 412

linux 的 BASH

阅读数 625

没有更多推荐了,返回首页