首页 > 技术文章 > 1, shell 第一部分

k8s-pod 2020-08-16 00:21 原文

#! /bin/bash
LOG_DIR=/var/log
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ]
then
        echo "Must be root to run this script"
        exit 1
fi
cd $LOG_DIR || {
        echo "Cannot change to necessary directory." >&2
        exit 1
}
#不能进入log的目录才执行后面的括号里面的
cat /dev/null > messages && echo "Logs cleaned up."
exit 0
# 退出之前返回0表示成功,返回1表示失败

当shell 脚本以非交互方式(文件方式)运行时,它会先查找环境变量ENV(通常是.bashrc, .bash_profile , /etc/bashrc , /etc/profile)

for 条件
    do 
        内容
done



if [ 条件 ]
        then
            内容
Fi
 或者

if [ 条件 ];then

      指令

fi

[root@node1 ~]# for i in {1,2};do echo $i ;done
1
2
[root@node1 ~]# for((i=1;i<10;i++));do echo "$i" ;done
 1
 2
 3
 4
 5
 6
 7
 8
 9
[root@node1 ~]#



[root@node1 ~]# a=192.168.1.2
[root@node1 ~]# b='192.168.1.2'
[root@node1 ~]# c="192.168.1.2"
[root@node1 ~]# echo "a=$a"
a=192.168.1.2
[root@node1 ~]# echo "b=$b"
b=192.168.1.2
[root@node1 ~]# echo "c=${c}"
c=192.168.1.2
[root@node1 ~]#
[root@node1 ~]# a=192.168.1.2-$a
[root@node1 ~]# b='192.168.1.2-$a'
[root@node1 ~]# c="192.168.1.2-$a"
[root@node1 ~]# echo "a=$a"
a=192.168.1.2-192.168.1.2
[root@node1 ~]# echo "b=$b"
b=192.168.1.2-$a
[root@node1 ~]# echo "c=${c}"
c=192.168.1.2-192.168.1.2-192.168.1.2
[root@node1 ~]#

单引号定义的变量原样输出,无论是否为变量,都不会解析。
双引号定义的变量会把引号里面的变量及命令都解析输出。(常用)
[root@node1 ~]# echo 'today is date'
today is date
[root@node1 ~]# echo "today is date"
today is date
[root@node1 ~]# echo "today is `date`"
today is 2018年 11月 17日 星期六 23:17:47 CST
[root@node1 ~]# echo "today is $(date)"
today is 2018年 11月 17日 星期六 23:18:25 CST
[root@node1 ~]# oldboy=teacher
[root@node1 ~]# echo $oldboy
teacher
[root@node1 ~]# echo '$oldboy'
$oldboy
[root@node1 ~]# echo "$oldboy"
teacher
[root@node1 ~]#
[root@node1 ~]# for((i=0;i<10;i++));do echo $i;done   #备注:注意括号
0
1
2
3
4
5
6
7
8
9
[root@node1 ~]#

[root@node1 ~]# basename /home/appuser/a.sh 
a.sh
[root@node1 ~]# dirname /home/appuser/a.sh
/home/appuser
[root@node1 ~]#

 

推荐阅读