shell-笔记

看自shell菜鸟教程:Shell 变量 | 菜鸟教程

另外文档可参考:http://www.zsythink.net/archives/category/%e5%bc%80%e5%8f%91/bash/

jp参看链接:shell jq解析_明天是Spring的博客-CSDN博客_jq shell

命令行 JSON 处理工具 jq 的使用介绍_Linux编程_Linux公社-Linux系统门户网站

ln命令_Linux ln命令:创建文件链接

1.for循环

for file in `ls /etc`; do echo $file; done

等价于:

for file in $(ls /etc);do echo $file ;done

2.if条件语句:

注意:条件与符号[]之间要有空格,并且目录名要写绝对路径;

错误:

if [ ! -d "~/shell-icode/" ];
then
    mkdir ~/shell-icode
else
    echo "file dir already exist"
fi

3.cat <<EOF命令

cat <<EOF - 简书

正确:

if [ ! -d "/Users/xxx/shell-icode/" ];
then
    mkdir /Users/xxx/shell-icode
else
    echo "file dir already exist"
fi

3.使用变量时才加$

4.变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

echo "I am good at ${skill}Script"

注意:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

5.多行注释

可以将一段代码定义成函数;或者利用:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

注意:EOF可以为任意字符;

6.实践:写脚本拉取git代码,并执行项目中的单测,mvn命令

#!/bin/bash

function git_pull_master()
{
    cd /xx/xx/xx/xx/xx
    git clone ssh://xxxxxxxxxx
    cd xx/xx/xx
}
if [ ! -d "/xx/xx/xx/xx/xx/" ];
then
    mkdir /xx/xx/xx/xx/xx
else
    echo "xx-xx-xx dir already exist"
fi

if [ ! -d "/xx/xx/xx/xx/xx/xx/xx/xx/" ];
then
    git_pull_master
else
    cd /xx/xx/xx/xx/xx/xx/xx/xx
    git pull
fi

export MAVEN_HOME=/usr/local/maven3
export PATH=${PATH}:${MAVEN_HOME}/bin
export JAVA_HOME=/usr/local/jdk1.8.0_191
export JRE_HOME=/usr/local/jdk1.8.0_191/jre

export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

mvn test

若脚本中,没有给出环境变量;crontab -e设置定时任务时,报没有mvn命令;

7.shell数组

#!/bin/bash
array_name=(
value0
value1
value2
value3
)
length=${#array_name[@]}
echo "获取数组的长度:$length"
echo "获取数组的每个元素:${array_name[@]}"
echo "获取数组的每个元素:${array_name[*]}"
echo "获取数组的第一个元素:${array_name[0]}"
echo "获取数组的第一个元素的长度:${#array_name[0]}"

结果:

获取数组的长度:4
获取数组的每个元素:value0 value1 value2 value3
获取数组的每个元素:value0 value1 value2 value3
获取数组的第一个元素:value0
获取数组的第一个元素的长度:6

8.条件表达式和运算符同表达式之间要有空格

if [ $a == $b ]
then
    echo "a等于b"
else
    echo "a不等于b"
fi

9.算数


a=5
b=6

result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"

result2=`expr $a + $b`
echo "result22为:$result2"

10.jq解析json串

10.shell脚本调试

set -e:通知bash若某条语句执行结果不为true,则退出脚本;

set +e:忽略错误继续执行;错误的标准是echo $?后值为非0的情况;所以要想继续执行下面的命令,需要在执行错误的命令前面加上set +e,之后再加上set -e即可;

set -x:日志输出;

exit 0:代表当前shell 正确退出;

exit 非0:代表当前shell 错误退出;

11.df -hl查看磁盘使用情况

Linux du命令和df命令区别_wisgood的专栏-CSDN博客_df和du的区别

linux根目录空间为什么会满-CSDN论坛

若挂载点/满了,可主要删除bcloud和glide的一些编译文件

12.bc工具,shell 显示百分数

shell 显示百分数_chengxuyonghu_51CTO博客

13.cp命令前的反斜杠

linux中cp指令前面加反斜杠 - 坑坑~ - 博客园

shell脚本中,见如:

\cp -r ${变量A}/* ${变量B}/

14.dirname $0

dirname $0,获取当前Shell脚本的路径

15.let的使用

16.realpath的使用

17.目录软连接

ln -s 有数据的目录 目的目录/   #会在目的目录中生成有数据的最后那个字段目录

18.grep 

为什么ps -ef | grep registry-data | grep -vc grep输出不是非包含grep的具体行呐,而是数值1?是因为-c 参数的作用;

grep命令搜索到关键字就会把相关数据行提取出;

grep是行提取命令,cut是列提取命令;

19.字符截取命令

注意:printf不支持数据流操作;即:cat file.txt | printf #会报错;

20.统计某目录及其子目录下的文件有多少个?

find . -type f -name "*.c" | wc -l

21.awk命令

Linux awk 只处理第一个匹配的行与只处理指定行_hongweigg的专栏-CSDN博客_awk只匹配一次

a=$(echo ${变量名} | sed 's/,/\n/g' | grep '字符串' | awk -F '分隔符' 'NR==行号{print $列号}')

22.shell获取星期几

date +%w

23.sed的使用

sed -i 's/"${变量名}" test/"${变量名}" test --key=\/home\/目录名/' 文件名.sh   #sed -i 's/要被替换的内容/将要替换成为的内容/' 文件名.sh

24.ln软连接:

25.shell脚本中变量的使用:

code_path=xxx/xxx/xxx
function funcname()
{
    src_dir=${code_path}/a
    echo ${src_dir}
}
funcname

26.shell调用Python:

shell脚本中调用python脚本的函数并获取python脚本函数的return值_SAGGITARXM-CSDN博客_shell脚本调用python脚本

valueing=`python -c 'import py文件; print py文件.py文件中的类().类中方法(参数)'`

27.shell发get请求(加参数):

abc=`curl -H "Content-type:application/json" "http://df/fd/fd/fd/fd?b=${ss}&a=${ss}"`

28.shell字符串转json:

Linux Shell格式化Json_一个程序员的成长之路。。。-CSDN博客_shell 格式化json

abc='{"a":"b","b":"c"}'

echo ${abc} | jq .

如何解析json:

shell解析json字符串_程序手艺人 - 有趣有能量-CSDN博客_shell解析json字符串

29.安装jq

Linux中解析json---jq-阿里云开发者社区

make失败时,看readme,执行即可

Linux中在命令行中使用JQ来解析修改JSON字符串:Linux中在命令行中使用JQ来解析修改JSON字符串 - 简书

获取值( -r  参数是去掉双引号):shell解析json之jq工具_victoria_hong的博客-CSDN博客_json解析工具jq 

30.shell执行命令:(问题)

  • 问题:

excmd='wget -O output.tar.gz --no-check-certificate --header "xxx:xxx" "https://xxxx/xx"'

$("${excmd}")为什么不行;

报:

  • 笨办法解决方案:

将excmd内容重定向到一个文件sh中,然后再执行:

echo ${excmd} >excmd.sh
sh -x excmd.sh

31.默认cache-dir/bin/中的内容(包含文件夹和文件)会覆盖a-output/output/bin中的内容

cp -r cache-dir/bin/ a-output/output/bin  等价与cache-dir/bin/ a-output/output/bin/

cp -r cache-dir/bin/* a-output/output/bin/  # 其中cache-dir/bin/*不能含有子文件夹,只能含有文件

32.sed 命令:

替换某字符串:sed: 1: “…”: invalid command code - 落格博客

shell脚本替换json文件中部分字段_Hdnrnfgf的专栏-CSDN博客_shell修改json的值

无比强大的shell之json解析工具jq , Linux命令行解析json, jq解析 json 实例:Shell:无比强大的shell之json解析工具jq , Linux命令行解析json, jq解析 json 实例

dfg=127.0.0.1:8888/public/c:123

sed -i "s#abc=.*#abc=$dfg#g" 文件名.sh

33.shell利用Python处理json串:

shell处理json字符串_gj19890923的专栏-CSDN博客_shell解析json字符串

str='{
  "old": {
    "a11": "1",
    "a12": "2",
    "a13": "3"
  },
  "other": {
    "b11": "1",
    "b12": "2"
  }
}'

py_code="
import sys,json
input=sys.stdin.read()
str=input.replace(' ','')
dict=json.loads(str)
dict_old=dict.get('old',{})
dict_other=dict.get('other',{})
dict_old.update(dict_other)
print(json.dumps(dict_old))
"

main(){
value=$(echo ${str}|python -c "${py_code}")
echo "get value:${value}"
}
main

34.搜索某文件,并都cp到某目录下:

find 查找的目录/ -name "*.log"|xargs -I {} cp {} abc/

xargs与cp结合使用 - starspace - 博客园

35.find -L 命令的使用

Linux find 命令详解 - HuYuanBlog - 博客园

只拷贝文件不拷贝软连接下目标文件的父目录的内容:可以用cp 来实现;反之,用cp --parent 来实现;

36.xargs 命令的使用;

输出查找文件的属性:find 查找的目录/ -name "*.log"|xargs ls -ahtl

统计xx.log文件的个数:find 查找的目录/ -name "*.log"|xargs ls -ahtl | wc -l

删除查找目录下xxx.log文件:find 查找的目录/ -name "*.log"|xargs rm -f 

展示最新的10个xxx.log文件:find ./ -name "*.log"|xargs ls -ahtl | head -10

Linux xargs 命令 | 菜鸟教程

37.export的用法

a=10 && export a 的效力仅限于该次登陆操作。即,同一个账号进行第二次登录时,第二次的命令终端中进行echo $a结果为空;

38.bashrc文件:

请注意后两个的区别:’.bash_profile’只在会话开始时被读取一次,而’.bashrc’则每次打开新的终端时,都要被读取。

39.export和bashrc结合使用:

可实现全局变量的设定;

40.bashrc、/etc/profile、/etc/bashrc、/etc /profile.d的区别

用户目录下的.bashrc文件:属于用户级设置,只是限制在用户应用上;每次打开控制台或终端窗口时,都会生效;

“/etc/profile”文件、“/etc/bashrc”文件及目录“/etc /profile.d”下的文件:应用到整个系统,属于系统级的配置;

bashrc与profile的区别_frank的专栏-CSDN博客_bashrc和profile区别

41.查看端口对应的进程和进程号:

42.查看某进程对应的端口号:

43.获取某目录的软连接的目标目录:

readlink -f ./目录名

44.cp和cp --parent的区别?

拷贝某目录下的所有内容(包含文件和软连接、目录),cp -r 目录/ 目标目录/

45.查找多个文件:

即查找.txt和.log文件:

find ./ -name "*.txt" -o -name "*.log"

46.获取目录的上上级目录:

Linux shell获得当前目录、上级目录、目录的最后部分 - 简书

47.shell中浮点数运算

$ CC=$(echo "2.1+5" | bc)

$ echo $CC

48.截取域名后缀:

a=mp.csdn.net.com

a=${a%.net.com}

输出:mp.csdn

49.crontab的使用

crontab -e

SHELL脚本定期删除日志文件(日志定期清理) - 知乎

50.将小数末尾的0去掉:

如何用shell将浮点数 2.195000 后的没有用的零去掉?-CSDN论坛

Shell printf格式字符串_荣耀之路-CSDN博客_shell打印字符串

哦,兄弟,我想得到结果是把 2.195000 的后面的0去掉,变成 2.195 
也就是说保持数的结果是不变的,只是把后面多余的三个0去掉,这样如何实现?


那也容易 用printf格式化即可
var=2.195000

printf "%g" $var
这就是你要的结果 如果要把结果赋值给新的变量 则
newvar=$(printf "%g" $var)

51.查看当前目录占用空间大小:

du -ah --max-depth=1

du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量 

du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。这几个之和就是du -sh的结果

52.shell if小数比较:

shell if 小数 比较 _Tenderrain_51CTO博客

53.获取进程pid

linux shell 根据进程名获取pid_星河的博客-CSDN博客_linux 获取pid

只输出pid,且kill掉:kill -9 $(lsof -i:port -t)

Linux lsof 命令 - sparkdev - 博客园

awk的应用:

1.打印第一列:

awk -F':' '{ print $1 }' /etc/passwd

注意:awk必须是单引号;跟列相关的是 -F参数

同命令:

cut -d':' -f1 /etc/passwd

2.打印第1列和第7列,并用制表符分隔:

awk -F':' '{print $1 "\t" $7}' /etc/passwd

3.在输出的头加name 和shell列,输出结尾加blue和/bin/bash列:

awk -F':' 'BEGIN{print "name\tshell"}{print $1 "\t" $7}END{print "blue\t/bin/bash"}' /etc/passwd

注意:awk用函数BEGIN和方法print;

4.搜索/etc/passwd中有关键字root的行:

注意:跟行相关的,就不需要-F参数了,每行的内容用$0

awk '/root/ {print $0}' /etc/passwd

5.输出每行行号,每列列号,对应的完整行内容:

注意:行号对应NR,列号对应NF,完成行内容对应$0

awk -F':' '{print NR "\t" NF "\t" $0}' /etc/passwd

若不加-F':' ,默认是按空格和制表符来分隔;

6.统计报表,合计每人01月份的工资:

awk.txt文件:

Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500

 awk '{split($3,date,"-");if (date[2]=="01"){name[$1]+=$5}}END{for(i in name){print i "\t" name[i]}}' awk.txt

vivi    2800
Tom    2500
John    4500

sed命令:

1.文件查找和压缩:

根据文件大小来查询:

2.

54.while多个条件时:

变量名1=0

变量名2=3

cp home/work/helloworld.sh home/work/helloworld-cp.sh
while ( [ $? -ne 0 ] && [ "${变量名1}" -le "${变量名2}" ] )

55.删除除某目录之外的其他目录:

Shouldn't "ls -l * | xargs rm -rf" work?

cd /目录绝对路径

ls -l | grep -v "目录名1" | grep -v "目录名2" | grep -v "目录名3" | awk '{print $9}' | xargs rm -rf

等价于:

cd /目录绝对路径

rm -rf !(目录名1|目录名2|目录名3)

56.shell 脚本判断磁盘大小百分比是否超过设定值

shell 脚本判断磁盘大小百分比是否超过设定值_1892962964_新浪博客

查询所有磁盘的可用百分比:df -k | grep -v Filesystem| awk '{print int($5)}'

57.shell单双引号拼接:

a='"dfdfd"'

echo ‘wget xxxx  "dfdfdfdf" ’$a >log.txt

58.rsync -av 源 目的

第2章 rsync(一):基本命令和用法 - 骏马金龙 - 博客园

59.cd -P

Linux cd命令_L, there!-CSDN博客

60.shell正则:

https://man.linuxde.net/docs/shell_regex.html

61.设置环境变量:

linux 设置go环境变量 - 简书

62.mac下将换行替换为逗号

在Mac上的sed中用字符串替换换行符 - DebugCN

63.kill(kill -15)和kill -9的区别

Kill之中-9和-15的区别 - Timzhouyes的博客 | Timzhouyes's Blog

IBM Docs

64.linux设置系统环境变量的文件

Linux&Mac系统环境变量配置 | SherlockGy's Blog

65.shell中的&作用:

shell 中 && 和 & 的区别 | Yisen的博客

66.匹配正则:

正则不要跟-w 一起使用;

grep与正则表达式 - 简书

#匹配txt文件
ll | egrep "\.txt$"      #这里的"."需要进行转义

67.lsof -i:命令结果受当前用户的影响

68.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pt_shell -constraints命令是在PT工具中用于加载约束文件的命令。通过该命令,可以将约束文件加载到PT工具的当前会话中,以便进行后续的布局和时序优化等操作。引用[1]提供了一个示例命令,其中“-f top_pt.tcl”参数指定了要加载的约束文件为top_pt.tcl,而“-output_log_file top_pt.log”参数指定了输出日志文件的名称为top_pt.log。使用该命令可以运行脚本并加载约束文件,从而自动执行一系列操作。 引用提到了OCV(on chip variation)约束文件的设置,这是在深压微米工艺中考虑芯片内部不同位置的PVT(Process, Voltage, Temperature)情况不同的情况下,针对不同的时序路径进行约束设置的一种方式。而引用提到了PT工具在打开时会自动运行当前目录下的.synopsys_pt.setup文件,该文件可以用于统一的参数配置等内容的设置。因此,可以通过合理设置约束文件和参数配置来实现对电路设计的优化和约束处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STA静态时序分析——学习笔记](https://blog.csdn.net/zgezi/article/details/108286253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值