ubuntu|ubuntu 脚本sh编写
常用
# 查看所有环境变量 - 打印环境变量
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
# 创建目录和删除文件
mkdirdir
rm -rf dir
# 复制 符号链接+d参数
# 复制 目录+r参数
cp -dflibdtypestd.so..
cp -rskia ..
其他
# 文件所在目录 相对或者绝对路径
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
【ubuntu|ubuntu 脚本sh编写】原文: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 判断 m y P a t h 是 否 存 在 并 且 是 否 具 有 可 执 行 权 限 i f [ ? x " myPath是否存在并且是否具有可执行权限 if [ -x " myPath是否存在并且是否具有可执行权限if[?x"myPath" ]; then
#mkdir “$myPath”
echo $myPath
fi
-d 判断 m y P a t h 是 否 存 在 i f [ ? d " myPath是否存在 if [ -d " myPath是否存在if[?d"myPath" ]; then
#mkdir “$myPath”
echo $myPath
fi
-f 判断 m y F i l e 是 否 存 在 i f [ ? f " myFile是否存在 if [ -f " myFile是否存在if[?f"myFile" ]; then
#touch “$myFile”
echo $myFile
fi
-n 判断一个变量是否有值
if [ -n “$myVar” ]; then
echo $myVar “is empty”
exit 0
fi
判断两个变量是否相等
if [ “ v a r 1 " = " var1" = " var1"="var2” ]; then
echo “$var1 eqv a r 2 " e l s e e c h o " var2" else echo " var2"elseecho"var1 not eq $var2”
fi
1.2 for语法
#!/bin/bash
for ((i =1; i<=5; i++));
do
sleep 1
echo $i
done
- 下面我自己写了一些简单的sample
2.1 扫描指定文件夹下面的so文件
index=0
function getAllFileFromDire(){
#echo $1
for f in1 / ? d o i f [ ? d " 1/* do if [ -d " 1/?doif[?d"f" ]
then
getAllFileFromDiref e l i f [ ? f " f elif [ -f " felif[?f"f" ]
then
name= f s t a r t = f start= fstart={name:0-2:3}
#echo “ s t a r t " i f [ " start" if [ " start"if["start” = “ f i l e h e a d " ] ; t h e n e c h o " filehead" ]; then echo " 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 $fo u t / 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 in1 / ? d o i f [ ? d " 1/* do if [ -d " 1/?doif[?d"f" ]
then
getAllFileFromDiref e l i f [ ? f " f elif [ -f " felif[?f"f" ]
then
name= f s t a r t = f start= fstart={name:0-3:3}
#echo “ s t a r t " i f [ " start" if [ " start"if["start” = “ f i l e h e a d " ] ; t h e n e c h o " filehead" ]; then echo " 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
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 编写字典程序
- Linux|109 个实用 shell 脚本
- 用npm发布一个包的教程并编写一个vue的插件发布
- VM|VM ware 的 harbor 私有仓库搭建 (Ubuntu16.04)
- Xshell5|Xshell5 远程连接本地虚拟机Ubuntu16
- 依赖注入模块
- ubuntu开机默认进入命令行模式/用户图形界面
- seedubuntu|seedubuntu 下搭建discuz论坛