Linux备忘1

来源:互联网 发布:淘宝购物哪个返利网好 编辑:程序博客网 时间:2024/06/18 08:21

**重点内容**shell编程

1、shell中01的问题

0使shellecho0命令行下:显示当前你用的是bash还是csh等。在脚本中:表示当前执行的脚本名称。

[root@localhost sdnoIAAS]# echo $0-bash[root@localhost sdnoIAAS]# ./test.sh ./test.sh

1,2一般代表你使用的命令的参数
比如./test.sh 3 4
这个时候,3就是142的值
$?代表上一条命令的返回值,真为0,假为1

2、shell中 “和$() 是等效的

echo realpath $0
echo (realpath0)

3、realpath和dirname两者的区别

echo realpath $0 #打印的是(路径+名称)/usr/local/sdnoPackage/sdnoIAAS/test.sh
echo dirname $0 #打印出来是 . (当前路径,一个点)
获取当前shell的路径:
echo dirname $(realpath $0) #打印出来是(纯路径)/usr/local/sdnoPackage/sdnoIAAS

4、&& 和 ||

顺带看看java中&和&&的区别:
&&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断。而&要对所有的条件都进行判断
网站:http://blog.csdn.net/lishiyuzuji/article/details/8116516

5、-z -e

参考链接:http://bbs.csdn.net/topics/300125422
-z代表的是*该变量*是否有值。
[ -z STRING ] “STRING” 的长度为零则为真。(没有值则是true)
[ -e FILE ] 如果 *FILE(文件)*存在则为真
例:

FINAL_DIR="/opt/sdno-$(date +%Y%m%d)";[[ ! -z $1 ]] && FINAL_DIR=$1;
# local binding ip addressIPADDR=`for f in $(ip link |grep "mtu" | awk '{print $2}' | grep -v "lo"|grep -v "docker*"); do ifname=${f%%@*}; ifname=${ifname%%:}; addrmask=$(ip addr show dev ${ifname}|grep "inet "|awk '{print $2}'); [[ -n ${addrmask} ]] && echo ${addrmask%%/*}; done`;[[ -z $IPADDR ]] && IPADDR="127.0.0.1";[[ ! -z $2 ]] && IPADDR=$2;if [[ ${#IPADDR} -gt 15 ]]; then    echo "You have multiple IP address, please choose which to use:";        select s in $IPADDR; do            [[ -n $s ]] && IPADDR=$s && break;        donefiexport IPADDR;

6、 [[和[

1…”[“是一条命令, 与test等价,大多数shell都支持
“[[“,是关键字,许多shell(如ash bsh)并不支持这种方式
2…[[]]结构比Bash版本的[]更通用。用[[ … ]]测试结构比用[ … ]更能防止脚本里的许多逻辑错误。比如说,&&,||,<和>操作符能在一个[[]]测试里通过,但在[]结构会发生错误。
3、字符串转换会用到[[]],一般的话用[]也可以

7 yum mysql客户端

yum search mysqlyum install mysql安装mysql客户端:          yum install mysql安装mysql 服务器端:          yum install mysql-server          yum install mysql-devel如果yum install mysql有问题,那么先用rpm -e 删掉已有的安装包。注:mysql客户端的包名不一定包含mysql,也有可能是mariadb装完之后看包名[root@cgs-v5-e2e-12 local]# which mysql/usr/bin/mysql[root@cgs-v5-e2e-12 local]# rpm -qf /usr/bin/mysqlmariadb-5.5.56-2.el7.x86_64不同机器rpm -qf 不一样[root@localhost bin]# rpm -qf /usr/bin/mysqlcommunity-mysql-5.6.21-5.fc21.x86_64

8、关于rpm

rpm -qf `which 程序名` #返回软件包的全名 rpm -qif `which 程序名` #返回软件包的有关信息 rpm -qlf `which 程序名` #返回软件包的文件列表注意,这里不是引号,而是`,就是键盘左上角的那个键。也可以使用rpm -qilf,同时输出软件包信息和文件列表等同于 which mysql | xargs rpm -qfil 关于rpm详细用法见: http://man.linuxde.net/rpm

9、关于查找
which主要用来查找可直接执行的命令,可以查找别名。通过which (命令别名),查找到命令的位置
whereis比which的搜索范围大了一些,同时可以查找源文件和man文件。这两个命令适用于查找安装好的命令
locate的查找范围更大,可以查找任意类型文件。适合快速查找指定文件。
find最强大也最慢。适合查找前几个命令找不到的文件。

关于四种命令的详细用法见:
http://blog.csdn.net/l1902090/article/details/24887997

10、重定向

[[ -e $FINAL_DIR/zenap-msb-apigateway ]] && (        cd $FINAL_DIR/zenap-msb-apigateway;        [[ -z $V ]] && ./shutdown.sh 2> /dev/null 1> /dev/null || ./shutdown.sh);-z $V 意思是执行脚本的时候如果给v加了一个变量,那么就会执行./shutdown.sh,把错误信息都输出到屏幕上。/shutdown.sh 2> /dev/null 1> /dev/null和./shutdown.sh的区别:前者是不输出任何东西,都放到空文件并抛弃,后者是把输出信息打印到屏幕上。另:0表示准备输入1表示标准输出2表示标准错误输出
docker ps | grep 容器名字docker exec -it 容器id /bin/shdocker restart 容器id