ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

ubuntu 脚本sh编写

2019-08-02 15:39:42  阅读:593  来源: 互联网

标签:fi quot echo sh myPath ubuntu 编写 dir out


常用

# 查看所有环境变量 - 打印环境变量
env
echo $PATH
export LD_LIBRARY_PATH=$PWD
 
#定义和取消变量
var1="123"
unset var1
 
# 打印系统信息 grep -v "U" 反向不匹配
uname -a
 
# 账号和密码 - 切换账号 - 设置账号密码
su root
su -
sudo passwd root
 
# 打开文件管理器 - 切换到用户目录 - 切换到上次访问目录
cd 
cd -
nautilus .
 
# 目录快速操作 目录入栈 出栈 列出栈目录 切换目录 弹出指定栈中目录
# + 从左至右 - 从右至左  序号从0开始计数
pushd .
popd  
dirs
pushd -0
popd +2
 
# 查看命令位置
which git

基本命令详情

# echo 显示文本
# -e 激活转义字符,不当字符串输出
echo "\nHello"
echo "\nHello\b1"
 
# yes 重复输出字符串
yes 
yes n
 
# 创建目录和删除文件
mkdir  dir
rm -rf dir
 
# 复制 符号链接+d参数
# 复制 目录+r参数
cp -df  libdtypestd.so  ..
cp -r   skia ..

其他

# 文件所在目录 相对或者绝对路径
aa=`dirname $0`
 
# 执行脚本文件名
aa=`dirname $0 .sh`
 
# 执行脚本文件名(加后缀)
aa=`dirname $0`
 
# 标准获取脚本所在绝对目录
# 直接执行脚本,启动另一个shell,初始化$0,如$0为./build/copy_std.sh
build_dir=$(cd $(dirname $0);pwd) 
# 即使在source *.sh也正常,source并不会另起一个新的shell进程,推荐写法
build_dir=$(cd $(dirname ${BASH_SOURCE[0]});pwd) 

控制语句

分支控制if

# 单分支 
a=4
if [ $a -eq 4 ]
then
   echo "4 == 4"
fi
 
# 双分支
# -e 文件存在
# -d 是否为目录
# -r 可读 -w 可写 -x 可执行
# 注意[]内部两边有空格
if [ ! -e TextEngineLib ];then
    echo "TextEngineLib not exist"
else
    echo "TextEngineLib exist "
fi
 
# 多分支
if [];then
   echo "1"
elif [];then
   echo "2"
else
   echo "3"
fi

循环控制for

# 执行6次循环
for((i=0;i<6;++i))
do
    echo $i
done
# 另一种方式
for i in {2..7}
do
    echo $i
done
 
# 给定列表循环
for file in a.so b.so c.so 
do 
    echo $file 
done 
 
# 文件
for file in *.txt
do 
    echo $file
done
# 
for file in `ls *.txt`
do 
    echo $file
done

常见脚本写法

获取运行目录,脚本目录,上级目录

#!/bin/bash
run_dir=${PWD} 
build_dir=$(cd $(dirname ${BASH_SOURCE[0]});pwd) 
cd ${build_dir}/.. 
root_dir=${PWD} 
echo $run_dir 
echo $build_dir 
echo $root_dir 
cd $run_dir 

原文:https://blog.csdn.net/dadan1314/article/details/86627770

我们在使用Ubuntu系统开发的过程中,经常会遇到一些重复的操作,想copy, push等等。这个时候我们就可以自己编写一个sh脚本,使用sh脚本操作这些重复的动作。
1.在编写sh脚本前了解一下基本语法
1.1 if语句

#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var/log/httpd/access.log"
-x 判断myPathif[x&quot;myPath是否存在并且是否具有可执行权限 if [ -x &quot;myPath是否存在并且是否具有可执行权限if[−x"myPath" ];then
#mkdir “$myPath”
echo $myPath
fi

-d 判断myPathif[d&quot;myPath是否存在 if [ -d &quot;myPath是否存在if[−d"myPath" ];then
#mkdir “$myPath”
echo $myPath
fi

-f 判断myFileif[f&quot;myFile是否存在 if [ -f &quot;myFile是否存在if[−f"myFile" ];then
#touch “$myFile”
echo $myFile
fi

-n 判断一个变量是否有值
if [ -n “$myVar” ];then
echo $myVar “is empty”
exit 0
fi

判断两个变量是否相等
if [ “var1&quot;=&quot;var1&quot; = &quot;var1"="var2” ];then
echo “$var1 eq var2&quot;elseecho&quot;var2&quot; else echo &quot;var2"elseecho"var1 not eq $var2”
fi

1.2 for语法

#!/bin/bash

for ((i =1;i<=5;i++));
do
sleep 1
echo $i
done

  1. 下面我自己写了一些简单的sample
    2.1 扫描指定文件夹下面的so文件

filehead=“so”
index=0
function getAllFileFromDire(){
#echo $1
for f in 1/doif[d&quot;1/* do if [ -d &quot;1/∗doif[−d"f" ]
then
getAllFileFromDire felif[f&quot;f elif [ -f &quot;felif[−f"f" ]
then
name=fstart=f start=fstart={name:0-2:3}
#echo “start&quot;if[&quot;start&quot; if [ &quot;start"if["start” = “filehead&quot;];thenecho&quot;filehead&quot; ];then echo &quot;filehead"];thenecho"name”
let index++
fi
fi
done
}

getAllFileFromDire /home/bob/Desktop/Document/1.7.1/out-of-source

echo $index

2.2 对当前目录下面的所有apk文件进行签名,把签名后的文件放到以当前时间为名字的文件夹下面

#!/bin/bash
key=t1S9D21N03nX
out=date '+%Y%m%d_%H%M'
mkdir $out
for f in *.apk
do
echo $f
#echo $key |
java -jar signapk.jar platform.x509.pem platform.pk8 $f out/out/out/f
done

2.3 把制定的文件夹下面的所有扩展名为so的文件copy到制定的位置

date
source_path=/home/…/Desktop/Document/1.9/out-of-source
#source_path=/home/…/Desktop/Document/out-of-source
target_path=/home/…/tftpboot/avs_libs/
filehead=".so"
index=0
function getAllFileFromDire(){
#echo $1
for f in 1/doif[d&quot;1/* do if [ -d &quot;1/∗doif[−d"f" ]
then
getAllFileFromDire felif[f&quot;f elif [ -f &quot;felif[−f"f" ]
then
name=fstart=f start=fstart={name:0-3:3}
#echo “start&quot;if[&quot;start&quot; if [ &quot;start"if["start” = “filehead&quot;];thenecho&quot;filehead&quot; ];then echo &quot;filehead"];thenecho"name”
let index++
cp $name $target_path
fi
fi
done
}

getAllFileFromDire $source_path

echo “copy $index librarys to $target_path”

cp $source_path/Integration/test/app $target_path/…/tools/

2.4 抓取当前系统的memory info到指定文件

#sn=$(adb shell getprop ro.boot.serialno)
out=date '+%Y%m%d_%H%M'_meminfo.txt
echo > $out
#echo SN: ${sn} >> $out
echo >> $out
while true
do

date >> $out
#cat /proc/meminfo | grep -E "Mem|Cached|Buffers" >> $out
cat /proc/meminfo >> $out
echo  >> $out
sleep 60

done

原文:https://blog.csdn.net/bogongjie/article/details/83270331

标签:fi,quot,echo,sh,myPath,ubuntu,编写,dir,out
来源: https://blog.csdn.net/m0_37931718/article/details/98206877

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有